linersh 0.5.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.
- package/README.md +168 -0
- package/bin/liner.js +126 -0
- package/dist/App.js +195 -0
- package/dist/App.js.map +1 -0
- package/dist/agents/detect.js +102 -0
- package/dist/agents/detect.js.map +1 -0
- package/dist/agents/events.js +8 -0
- package/dist/agents/events.js.map +1 -0
- package/dist/agents/jtbd-clarify.js +144 -0
- package/dist/agents/jtbd-clarify.js.map +1 -0
- package/dist/agents/parsers.js +316 -0
- package/dist/agents/parsers.js.map +1 -0
- package/dist/agents/prompts.js +301 -0
- package/dist/agents/prompts.js.map +1 -0
- package/dist/agents/run-log.js +71 -0
- package/dist/agents/run-log.js.map +1 -0
- package/dist/agents/runner.js +180 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/bin-resolver.js +92 -0
- package/dist/bin-resolver.js.map +1 -0
- package/dist/browser-support.js +62 -0
- package/dist/browser-support.js.map +1 -0
- package/dist/colors.js +105 -0
- package/dist/colors.js.map +1 -0
- package/dist/components/Header.js +17 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/KeyHints.js +10 -0
- package/dist/components/KeyHints.js.map +1 -0
- package/dist/components/LabeledBox.js +53 -0
- package/dist/components/LabeledBox.js.map +1 -0
- package/dist/components/NextSteps.js +18 -0
- package/dist/components/NextSteps.js.map +1 -0
- package/dist/config.js +88 -0
- package/dist/config.js.map +1 -0
- package/dist/editor.js +40 -0
- package/dist/editor.js.map +1 -0
- package/dist/gates.js +121 -0
- package/dist/gates.js.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc.js +136 -0
- package/dist/ipc.js.map +1 -0
- package/dist/phases.js +348 -0
- package/dist/phases.js.map +1 -0
- package/dist/progress.js +185 -0
- package/dist/progress.js.map +1 -0
- package/dist/screens/AgentSetup.js +217 -0
- package/dist/screens/AgentSetup.js.map +1 -0
- package/dist/screens/BootSplash.js +159 -0
- package/dist/screens/BootSplash.js.map +1 -0
- package/dist/screens/BrowserSetup.js +181 -0
- package/dist/screens/BrowserSetup.js.map +1 -0
- package/dist/screens/CompileView.js +297 -0
- package/dist/screens/CompileView.js.map +1 -0
- package/dist/screens/FramingConfirmReview.js +193 -0
- package/dist/screens/FramingConfirmReview.js.map +1 -0
- package/dist/screens/Gate1Review.js +143 -0
- package/dist/screens/Gate1Review.js.map +1 -0
- package/dist/screens/Gate2Review.js +158 -0
- package/dist/screens/Gate2Review.js.map +1 -0
- package/dist/screens/ImportPrompt.js +65 -0
- package/dist/screens/ImportPrompt.js.map +1 -0
- package/dist/screens/LocalFilePicker.js +139 -0
- package/dist/screens/LocalFilePicker.js.map +1 -0
- package/dist/screens/NewMixtapeWizard.js +662 -0
- package/dist/screens/NewMixtapeWizard.js.map +1 -0
- package/dist/screens/NewProjectPrompt.js +66 -0
- package/dist/screens/NewProjectPrompt.js.map +1 -0
- package/dist/screens/PhaseRunner.js +1119 -0
- package/dist/screens/PhaseRunner.js.map +1 -0
- package/dist/screens/ProcessManifest.js +158 -0
- package/dist/screens/ProcessManifest.js.map +1 -0
- package/dist/screens/ProjectHub.js +546 -0
- package/dist/screens/ProjectHub.js.map +1 -0
- package/dist/screens/Settings.js +72 -0
- package/dist/screens/Settings.js.map +1 -0
- package/dist/screens/SourceModal.js +269 -0
- package/dist/screens/SourceModal.js.map +1 -0
- package/dist/screens/TapeBrowser.js +277 -0
- package/dist/screens/TapeBrowser.js.map +1 -0
- package/dist/screens/TapeDraftReview.js +440 -0
- package/dist/screens/TapeDraftReview.js.map +1 -0
- package/dist/screens/TapeEditor.js +310 -0
- package/dist/screens/TapeEditor.js.map +1 -0
- package/dist/screens/cassette-art.js +72 -0
- package/dist/screens/cassette-art.js.map +1 -0
- package/dist/store.js +10 -0
- package/dist/store.js.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/yaml-io.js +345 -0
- package/dist/yaml-io.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import React, { useMemo, useState } from "react";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import TextInput from "ink-text-input";
|
|
4
|
+
import { existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
|
|
5
|
+
import { join, relative } from "node:path";
|
|
6
|
+
import { KeyHints } from "../components/KeyHints.js";
|
|
7
|
+
import { HEADING, STRUCTURE } from "../colors.js";
|
|
8
|
+
const SUPPORTED_EXTENSIONS = new Set([".md", ".txt", ".html", ".htm", ".pdf"]);
|
|
9
|
+
export function LocalFilePicker({ projectFolder, initialPath, onPick, onCancel, }) {
|
|
10
|
+
const personalDir = join(projectFolder, "personal");
|
|
11
|
+
// Lazily ensure personal/ exists.
|
|
12
|
+
if (!existsSync(personalDir)) {
|
|
13
|
+
mkdirSync(personalDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
const entries = useMemo(() => listEntries(personalDir, projectFolder), [
|
|
16
|
+
personalDir,
|
|
17
|
+
projectFolder,
|
|
18
|
+
]);
|
|
19
|
+
const initialIndex = useMemo(() => {
|
|
20
|
+
if (!initialPath)
|
|
21
|
+
return 0;
|
|
22
|
+
const i = entries.findIndex((e) => e.relPath === initialPath);
|
|
23
|
+
return i >= 0 ? i : 0;
|
|
24
|
+
}, [entries, initialPath]);
|
|
25
|
+
const [selected, setSelected] = useState(initialIndex);
|
|
26
|
+
const [pasteMode, setPasteMode] = useState(false);
|
|
27
|
+
const [pasteValue, setPasteValue] = useState(initialPath ?? "personal/");
|
|
28
|
+
useInput((input, key) => {
|
|
29
|
+
if (pasteMode) {
|
|
30
|
+
if (key.escape)
|
|
31
|
+
setPasteMode(false);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (key.escape) {
|
|
35
|
+
onCancel();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (key.upArrow || input === "k") {
|
|
39
|
+
if (entries.length > 0)
|
|
40
|
+
setSelected((s) => Math.max(0, s - 1));
|
|
41
|
+
}
|
|
42
|
+
else if (key.downArrow || input === "j") {
|
|
43
|
+
if (entries.length > 0)
|
|
44
|
+
setSelected((s) => Math.min(entries.length - 1, s + 1));
|
|
45
|
+
}
|
|
46
|
+
else if (key.return) {
|
|
47
|
+
const entry = entries[selected];
|
|
48
|
+
if (!entry)
|
|
49
|
+
return;
|
|
50
|
+
if (!entry.supported)
|
|
51
|
+
return;
|
|
52
|
+
onPick(entry.relPath);
|
|
53
|
+
}
|
|
54
|
+
else if (input === "n") {
|
|
55
|
+
setPasteMode(true);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (pasteMode) {
|
|
59
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
60
|
+
React.createElement(Text, { color: HEADING, bold: true }, "New local file \u2014 paste a path relative to the project folder"),
|
|
61
|
+
React.createElement(Text, { dimColor: true },
|
|
62
|
+
personalDir,
|
|
63
|
+
"/..."),
|
|
64
|
+
React.createElement(Box, { marginTop: 1 },
|
|
65
|
+
React.createElement(Text, { color: STRUCTURE }, "path: "),
|
|
66
|
+
React.createElement(TextInput, { value: pasteValue, onChange: setPasteValue, onSubmit: (v) => {
|
|
67
|
+
const cleaned = v.trim();
|
|
68
|
+
if (!cleaned)
|
|
69
|
+
return;
|
|
70
|
+
onPick(cleaned);
|
|
71
|
+
}, placeholder: "personal/foo.pdf" })),
|
|
72
|
+
React.createElement(Box, { marginTop: 1 },
|
|
73
|
+
React.createElement(KeyHints, { hints: [
|
|
74
|
+
{ key: "enter", label: "use this path" },
|
|
75
|
+
{ key: "esc", label: "back" },
|
|
76
|
+
] }))));
|
|
77
|
+
}
|
|
78
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
79
|
+
React.createElement(Text, { color: HEADING, bold: true }, "Select a file from personal/"),
|
|
80
|
+
React.createElement(Text, { dimColor: true }, personalDir),
|
|
81
|
+
entries.length === 0 ? (React.createElement(Box, { marginTop: 1, flexDirection: "column" },
|
|
82
|
+
React.createElement(Text, { dimColor: true }, "(empty \u2014 put files into personal/ first, or press `n` to paste a path)"))) : (React.createElement(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1 }, entries.map((entry, i) => {
|
|
83
|
+
const isSelected = i === selected;
|
|
84
|
+
const tag = entry.supported ? entry.ext.slice(1) : `${entry.ext.slice(1)} (unsupported)`;
|
|
85
|
+
return (React.createElement(Box, { key: entry.relPath },
|
|
86
|
+
React.createElement(Text, { color: isSelected ? STRUCTURE : entry.supported ? undefined : undefined },
|
|
87
|
+
isSelected ? "▶ " : " ",
|
|
88
|
+
entry.basename),
|
|
89
|
+
React.createElement(Text, { dimColor: true },
|
|
90
|
+
" ",
|
|
91
|
+
formatSize(entry.size),
|
|
92
|
+
" \u00B7 ",
|
|
93
|
+
tag)));
|
|
94
|
+
}))),
|
|
95
|
+
React.createElement(KeyHints, { hints: [
|
|
96
|
+
{ key: "↑↓", label: "select" },
|
|
97
|
+
{ key: "enter", label: "use" },
|
|
98
|
+
{ key: "n", label: "paste path" },
|
|
99
|
+
{ key: "esc", label: "cancel" },
|
|
100
|
+
] })));
|
|
101
|
+
}
|
|
102
|
+
function listEntries(personalDir, projectFolder) {
|
|
103
|
+
if (!existsSync(personalDir))
|
|
104
|
+
return [];
|
|
105
|
+
const out = [];
|
|
106
|
+
for (const name of readdirSync(personalDir)) {
|
|
107
|
+
const abs = join(personalDir, name);
|
|
108
|
+
try {
|
|
109
|
+
const stat = statSync(abs);
|
|
110
|
+
if (!stat.isFile())
|
|
111
|
+
continue;
|
|
112
|
+
const ext = extOf(name);
|
|
113
|
+
out.push({
|
|
114
|
+
relPath: relative(projectFolder, abs),
|
|
115
|
+
absPath: abs,
|
|
116
|
+
basename: name,
|
|
117
|
+
size: stat.size,
|
|
118
|
+
ext,
|
|
119
|
+
supported: SUPPORTED_EXTENSIONS.has(ext),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// skip
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return out.sort((a, b) => a.basename.localeCompare(b.basename));
|
|
127
|
+
}
|
|
128
|
+
function extOf(name) {
|
|
129
|
+
const dot = name.lastIndexOf(".");
|
|
130
|
+
return dot < 0 ? "" : name.slice(dot).toLowerCase();
|
|
131
|
+
}
|
|
132
|
+
function formatSize(bytes) {
|
|
133
|
+
if (bytes < 1024)
|
|
134
|
+
return `${bytes} B`;
|
|
135
|
+
if (bytes < 1024 * 1024)
|
|
136
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
137
|
+
return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=LocalFilePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalFilePicker.js","sourceRoot":"","sources":["../../src/screens/LocalFilePicker.tsx"],"names":[],"mappings":"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"}
|