@sheepbun/yips 0.1.1

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 (99) hide show
  1. package/dist/agent/commands/command-catalog.js +243 -0
  2. package/dist/agent/commands/commands.js +418 -0
  3. package/dist/agent/conductor.js +118 -0
  4. package/dist/agent/context/code-context.js +68 -0
  5. package/dist/agent/context/memory-store.js +159 -0
  6. package/dist/agent/context/session-store.js +211 -0
  7. package/dist/agent/protocol/tool-protocol.js +160 -0
  8. package/dist/agent/skills/skills.js +327 -0
  9. package/dist/agent/tools/tool-executor.js +415 -0
  10. package/dist/agent/tools/tool-safety.js +52 -0
  11. package/dist/app/index.js +35 -0
  12. package/dist/app/repl.js +105 -0
  13. package/dist/app/update-check.js +132 -0
  14. package/dist/app/version.js +51 -0
  15. package/dist/code-context.js +68 -0
  16. package/dist/colors.js +204 -0
  17. package/dist/command-catalog.js +242 -0
  18. package/dist/commands.js +350 -0
  19. package/dist/conductor.js +94 -0
  20. package/dist/config/config.js +335 -0
  21. package/dist/config/hooks.js +187 -0
  22. package/dist/config.js +335 -0
  23. package/dist/downloader-state.js +302 -0
  24. package/dist/downloader-ui.js +289 -0
  25. package/dist/gateway/adapters/discord.js +108 -0
  26. package/dist/gateway/adapters/formatting.js +96 -0
  27. package/dist/gateway/adapters/telegram.js +106 -0
  28. package/dist/gateway/adapters/types.js +2 -0
  29. package/dist/gateway/adapters/whatsapp.js +124 -0
  30. package/dist/gateway/auth-policy.js +66 -0
  31. package/dist/gateway/core.js +87 -0
  32. package/dist/gateway/headless-conductor.js +328 -0
  33. package/dist/gateway/message-router.js +23 -0
  34. package/dist/gateway/rate-limiter.js +48 -0
  35. package/dist/gateway/runtime/backend-policy.js +18 -0
  36. package/dist/gateway/runtime/discord-bot.js +104 -0
  37. package/dist/gateway/runtime/discord-main.js +69 -0
  38. package/dist/gateway/session-manager.js +77 -0
  39. package/dist/gateway/types.js +2 -0
  40. package/dist/hardware.js +92 -0
  41. package/dist/hooks.js +187 -0
  42. package/dist/index.js +34 -0
  43. package/dist/input-engine.js +250 -0
  44. package/dist/llama-client.js +227 -0
  45. package/dist/llama-server.js +620 -0
  46. package/dist/llm/llama-client.js +227 -0
  47. package/dist/llm/llama-server.js +620 -0
  48. package/dist/llm/token-counter.js +47 -0
  49. package/dist/memory-store.js +159 -0
  50. package/dist/messages.js +59 -0
  51. package/dist/model-downloader.js +382 -0
  52. package/dist/model-manager-state.js +118 -0
  53. package/dist/model-manager-ui.js +194 -0
  54. package/dist/model-manager.js +190 -0
  55. package/dist/models/hardware.js +92 -0
  56. package/dist/models/model-downloader.js +382 -0
  57. package/dist/models/model-manager.js +190 -0
  58. package/dist/prompt-box.js +78 -0
  59. package/dist/prompt-composer.js +498 -0
  60. package/dist/repl.js +105 -0
  61. package/dist/session-store.js +211 -0
  62. package/dist/spinner.js +76 -0
  63. package/dist/title-box.js +388 -0
  64. package/dist/token-counter.js +47 -0
  65. package/dist/tool-executor.js +415 -0
  66. package/dist/tool-protocol.js +121 -0
  67. package/dist/tool-safety.js +52 -0
  68. package/dist/tui/app.js +2553 -0
  69. package/dist/tui/startup.js +56 -0
  70. package/dist/tui-input-routing.js +53 -0
  71. package/dist/tui.js +51 -0
  72. package/dist/types/app-types.js +2 -0
  73. package/dist/types.js +2 -0
  74. package/dist/ui/colors.js +204 -0
  75. package/dist/ui/downloader/downloader-state.js +302 -0
  76. package/dist/ui/downloader/downloader-ui.js +289 -0
  77. package/dist/ui/input/input-engine.js +250 -0
  78. package/dist/ui/input/tui-input-routing.js +53 -0
  79. package/dist/ui/input/vt-session.js +168 -0
  80. package/dist/ui/messages.js +59 -0
  81. package/dist/ui/model-manager/model-manager-state.js +118 -0
  82. package/dist/ui/model-manager/model-manager-ui.js +194 -0
  83. package/dist/ui/prompt/prompt-box.js +78 -0
  84. package/dist/ui/prompt/prompt-composer.js +498 -0
  85. package/dist/ui/spinner.js +76 -0
  86. package/dist/ui/title-box.js +388 -0
  87. package/dist/ui/tui/app.js +6 -0
  88. package/dist/ui/tui/autocomplete.js +85 -0
  89. package/dist/ui/tui/constants.js +18 -0
  90. package/dist/ui/tui/history.js +29 -0
  91. package/dist/ui/tui/layout.js +341 -0
  92. package/dist/ui/tui/runtime-core.js +2584 -0
  93. package/dist/ui/tui/runtime-utils.js +53 -0
  94. package/dist/ui/tui/start-tui.js +54 -0
  95. package/dist/ui/tui/startup.js +56 -0
  96. package/dist/version.js +51 -0
  97. package/dist/vt-session.js +168 -0
  98. package/install.sh +457 -0
  99. package/package.json +128 -0
package/install.sh ADDED
@@ -0,0 +1,457 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ REPO_ROOT="$SCRIPT_DIR"
7
+ LLAMA_REPO_DIR="${HOME}/llama.cpp"
8
+ LLAMA_BUILD_DIR="${LLAMA_REPO_DIR}/build"
9
+ LLAMA_SERVER_BIN="${LLAMA_BUILD_DIR}/bin/llama-server"
10
+ YIPS_DIR="${HOME}/.yips"
11
+ YIPS_MODELS_DIR="${YIPS_DIR}/models"
12
+ YIPS_ENV_FILE="${YIPS_DIR}/env.sh"
13
+ YIPS_BIN_DIR="${HOME}/.local/bin"
14
+ YIPS_LAUNCHER_PATH="${YIPS_BIN_DIR}/yips"
15
+ YIPS_CONFIG_PATH="${YIPS_DIR}/config.json"
16
+
17
+ OS_NAME=""
18
+ PKG_MANAGER=""
19
+ INSTALL_PREFIX=()
20
+ APT_UPDATED=0
21
+ PACMAN_UPDATED=0
22
+ INSTALL_CUDA=0
23
+ NODE_RUNTIME_DIAG=""
24
+
25
+ log() {
26
+ printf '[install] %s\n' "$*"
27
+ }
28
+
29
+ warn() {
30
+ printf '[install][warn] %s\n' "$*" >&2
31
+ }
32
+
33
+ die() {
34
+ printf '[install][error] %s\n' "$*" >&2
35
+ exit 1
36
+ }
37
+
38
+ on_error() {
39
+ local line="${1:-unknown}"
40
+ die "Installer failed near line ${line}. Re-run with: bash -x ./install.sh"
41
+ }
42
+ trap 'on_error "${LINENO}"' ERR
43
+
44
+ detect_platform() {
45
+ local uname_out
46
+ uname_out="$(uname -s)"
47
+ case "$uname_out" in
48
+ Linux) OS_NAME="linux" ;;
49
+ Darwin) OS_NAME="macos" ;;
50
+ *) die "Unsupported OS: ${uname_out}" ;;
51
+ esac
52
+
53
+ if command -v apt-get >/dev/null 2>&1; then
54
+ PKG_MANAGER="apt"
55
+ elif command -v pacman >/dev/null 2>&1; then
56
+ PKG_MANAGER="pacman"
57
+ elif command -v dnf >/dev/null 2>&1; then
58
+ PKG_MANAGER="dnf"
59
+ elif command -v brew >/dev/null 2>&1; then
60
+ PKG_MANAGER="brew"
61
+ else
62
+ die "No supported package manager found. Install dependencies manually: git cmake build tools nodejs npm curl."
63
+ fi
64
+
65
+ if [[ "$(id -u)" -ne 0 ]] && command -v sudo >/dev/null 2>&1; then
66
+ INSTALL_PREFIX=(sudo)
67
+ else
68
+ INSTALL_PREFIX=()
69
+ fi
70
+
71
+ log "Detected OS=${OS_NAME}, package manager=${PKG_MANAGER}"
72
+ }
73
+
74
+ parse_args() {
75
+ while [[ $# -gt 0 ]]; do
76
+ case "$1" in
77
+ --cuda)
78
+ INSTALL_CUDA=1
79
+ shift
80
+ ;;
81
+ -h|--help)
82
+ cat <<'EOF'
83
+ Usage: ./install.sh [--cuda]
84
+
85
+ Options:
86
+ --cuda Install CUDA toolkit via package manager and build llama.cpp with CUDA.
87
+ EOF
88
+ exit 0
89
+ ;;
90
+ *)
91
+ die "Unknown argument: $1 (try --help)"
92
+ ;;
93
+ esac
94
+ done
95
+ }
96
+
97
+ install_packages_apt() {
98
+ local packages=("$@")
99
+ if [[ "$APT_UPDATED" -eq 0 ]]; then
100
+ "${INSTALL_PREFIX[@]}" apt-get update -y
101
+ APT_UPDATED=1
102
+ fi
103
+ "${INSTALL_PREFIX[@]}" apt-get install -y "${packages[@]}"
104
+ }
105
+
106
+ install_packages_dnf() {
107
+ local packages=("$@")
108
+ "${INSTALL_PREFIX[@]}" dnf install -y "${packages[@]}"
109
+ }
110
+
111
+ install_packages_pacman() {
112
+ local packages=("$@")
113
+ if [[ "$PACMAN_UPDATED" -eq 0 ]]; then
114
+ log "Arch detected: using full-upgrade pacman workflow (Syu)."
115
+ "${INSTALL_PREFIX[@]}" pacman -Syu --needed --noconfirm "${packages[@]}"
116
+ PACMAN_UPDATED=1
117
+ else
118
+ "${INSTALL_PREFIX[@]}" pacman -S --needed --noconfirm "${packages[@]}"
119
+ fi
120
+ }
121
+
122
+ install_packages_brew() {
123
+ local packages=("$@")
124
+ brew install "${packages[@]}"
125
+ }
126
+
127
+ install_cuda_toolkit() {
128
+ if [[ "${INSTALL_CUDA}" -ne 1 ]]; then
129
+ return
130
+ fi
131
+
132
+ log "--cuda enabled: installing CUDA toolkit prerequisites"
133
+ case "$PKG_MANAGER" in
134
+ apt)
135
+ install_packages_apt nvidia-cuda-toolkit
136
+ ;;
137
+ pacman)
138
+ install_packages_pacman cuda
139
+ ;;
140
+ dnf)
141
+ install_packages_dnf cuda
142
+ ;;
143
+ brew)
144
+ warn "CUDA installation is not managed on macOS via Homebrew by this script; continuing without toolkit install."
145
+ ;;
146
+ *)
147
+ die "Unsupported package manager for CUDA install: ${PKG_MANAGER}"
148
+ ;;
149
+ esac
150
+ }
151
+
152
+ ensure_prerequisites() {
153
+ local missing=()
154
+ local cmd
155
+ for cmd in git cmake curl node npm; do
156
+ if ! command -v "$cmd" >/dev/null 2>&1; then
157
+ missing+=("$cmd")
158
+ fi
159
+ done
160
+
161
+ if [[ "${#missing[@]}" -eq 0 ]]; then
162
+ log "Prerequisites already available."
163
+ return
164
+ fi
165
+
166
+ log "Installing missing prerequisites: ${missing[*]}"
167
+ case "$PKG_MANAGER" in
168
+ apt)
169
+ install_packages_apt git cmake build-essential curl nodejs npm
170
+ ;;
171
+ pacman)
172
+ install_packages_pacman git cmake base-devel curl nodejs npm
173
+ ;;
174
+ dnf)
175
+ install_packages_dnf git cmake gcc-c++ make curl nodejs npm
176
+ ;;
177
+ brew)
178
+ install_packages_brew git cmake curl node
179
+ ;;
180
+ *)
181
+ die "Unsupported package manager: ${PKG_MANAGER}"
182
+ ;;
183
+ esac
184
+ }
185
+
186
+ capture_node_runtime_diag() {
187
+ local node_diag npm_diag
188
+ node_diag="$(node -v 2>&1 || true)"
189
+ npm_diag="$(npm -v 2>&1 || true)"
190
+ NODE_RUNTIME_DIAG=$'node -v:\n'"${node_diag}"$'\n\nnpm -v:\n'"${npm_diag}"
191
+ }
192
+
193
+ node_runtime_healthy() {
194
+ node -v >/dev/null 2>&1 && npm -v >/dev/null 2>&1
195
+ }
196
+
197
+ repair_node_runtime_arch() {
198
+ warn "Detected broken Node runtime linkage. Attempting Arch self-heal reinstall (nodejs/npm/simdjson)."
199
+ install_packages_pacman nodejs npm simdjson
200
+ }
201
+
202
+ ensure_node_runtime_healthy() {
203
+ if node_runtime_healthy; then
204
+ return
205
+ fi
206
+
207
+ capture_node_runtime_diag
208
+
209
+ if [[ "$PKG_MANAGER" == "pacman" ]]; then
210
+ repair_node_runtime_arch
211
+ if node_runtime_healthy; then
212
+ log "Node runtime self-heal succeeded."
213
+ return
214
+ fi
215
+ capture_node_runtime_diag
216
+ die $'Node runtime is still unhealthy after Arch self-heal.\nRun manually:\n sudo pacman -Syu --needed nodejs npm simdjson\nThen retry ./install.sh\n\nDiagnostics:\n'"${NODE_RUNTIME_DIAG}"
217
+ fi
218
+
219
+ die $'Node runtime is unhealthy.\nPlease repair your Node installation and retry.\n\nDiagnostics:\n'"${NODE_RUNTIME_DIAG}"
220
+ }
221
+
222
+ setup_llama_repo() {
223
+ if [[ -d "${LLAMA_REPO_DIR}/.git" ]]; then
224
+ log "Updating existing llama.cpp checkout in ${LLAMA_REPO_DIR}"
225
+ git -C "${LLAMA_REPO_DIR}" pull --ff-only
226
+ else
227
+ log "Cloning llama.cpp into ${LLAMA_REPO_DIR}"
228
+ git clone https://github.com/ggerganov/llama.cpp "${LLAMA_REPO_DIR}"
229
+ fi
230
+ }
231
+
232
+ num_jobs() {
233
+ if command -v nproc >/dev/null 2>&1; then
234
+ nproc
235
+ return
236
+ fi
237
+ if command -v sysctl >/dev/null 2>&1; then
238
+ sysctl -n hw.logicalcpu 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4
239
+ return
240
+ fi
241
+ echo 4
242
+ }
243
+
244
+ build_llama_cpu() {
245
+ log "Building llama.cpp (CPU mode)"
246
+ # Ensure prior CUDA configure state does not leak into CPU fallback.
247
+ rm -f "${LLAMA_BUILD_DIR}/CMakeCache.txt"
248
+ rm -rf "${LLAMA_BUILD_DIR}/CMakeFiles"
249
+ cmake -S "${LLAMA_REPO_DIR}" -B "${LLAMA_BUILD_DIR}" -DGGML_CUDA=OFF
250
+ cmake --build "${LLAMA_BUILD_DIR}" -j "$(num_jobs)"
251
+ }
252
+
253
+ build_llama_cuda_then_fallback() {
254
+ if [[ "${INSTALL_CUDA}" -eq 1 ]]; then
255
+ log "--cuda enabled: attempting CUDA build first."
256
+ fi
257
+
258
+ if command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi >/dev/null 2>&1; then
259
+ if ! command -v nvcc >/dev/null 2>&1; then
260
+ warn "NVIDIA GPU detected but nvcc is unavailable. Skipping CUDA build and using CPU mode."
261
+ build_llama_cpu
262
+ return
263
+ fi
264
+ log "NVIDIA GPU detected. Attempting CUDA build."
265
+ if cmake -S "${LLAMA_REPO_DIR}" -B "${LLAMA_BUILD_DIR}" -DGGML_CUDA=ON &&
266
+ cmake --build "${LLAMA_BUILD_DIR}" -j "$(num_jobs)"; then
267
+ log "CUDA build succeeded."
268
+ return
269
+ fi
270
+ warn "CUDA build failed. Falling back to CPU build."
271
+ else
272
+ log "No NVIDIA GPU detected. Using CPU build."
273
+ fi
274
+ build_llama_cpu
275
+ }
276
+
277
+ validate_llama_server_binary() {
278
+ [[ -x "${LLAMA_SERVER_BIN}" ]] || die "llama-server not found at ${LLAMA_SERVER_BIN} after build."
279
+ "${LLAMA_SERVER_BIN}" --help >/dev/null 2>&1 || true
280
+ log "llama-server ready: ${LLAMA_SERVER_BIN}"
281
+ }
282
+
283
+ ensure_yips_dirs() {
284
+ mkdir -p "${YIPS_MODELS_DIR}"
285
+ mkdir -p "${YIPS_BIN_DIR}"
286
+ }
287
+
288
+ write_env_file() {
289
+ local temp_file
290
+ temp_file="$(mktemp)"
291
+ if [[ -f "${YIPS_ENV_FILE}" ]]; then
292
+ grep -vE '^export (LLAMA_SERVER_PATH|YIPS_LLAMA_SERVER_PATH|YIPS_LLAMA_MODELS_DIR|YIPS_CONFIG_PATH|YIPS_BIN_DIR)=' "${YIPS_ENV_FILE}" \
293
+ | grep -vE '^export PATH="\$YIPS_BIN_DIR:\$PATH"$' >"${temp_file}" || true
294
+ fi
295
+ {
296
+ echo "export LLAMA_SERVER_PATH=\"${LLAMA_SERVER_BIN}\""
297
+ echo "export YIPS_LLAMA_SERVER_PATH=\"${LLAMA_SERVER_BIN}\""
298
+ echo "export YIPS_LLAMA_MODELS_DIR=\"${YIPS_MODELS_DIR}\""
299
+ echo "export YIPS_CONFIG_PATH=\"${YIPS_CONFIG_PATH}\""
300
+ echo "export YIPS_BIN_DIR=\"${YIPS_BIN_DIR}\""
301
+ echo 'export PATH="$YIPS_BIN_DIR:$PATH"'
302
+ } >>"${temp_file}"
303
+ mv "${temp_file}" "${YIPS_ENV_FILE}"
304
+ chmod 600 "${YIPS_ENV_FILE}"
305
+ log "Updated ${YIPS_ENV_FILE}"
306
+ }
307
+
308
+ install_yips_launcher() {
309
+ cat >"${YIPS_LAUNCHER_PATH}" <<EOF
310
+ #!/usr/bin/env bash
311
+ set -euo pipefail
312
+ REPO_ROOT="${REPO_ROOT}"
313
+ if [[ ! -d "\${REPO_ROOT}" ]]; then
314
+ echo "[yips launcher] Repository path not found: \${REPO_ROOT}" >&2
315
+ exit 1
316
+ fi
317
+ # Preserve caller cwd so Yips reflects where the command was launched.
318
+ # Set YIPS_USE_DIST=1 to prefer compiled output when desired.
319
+ if [[ "\${YIPS_USE_DIST:-0}" == "1" ]] && [[ -f "\${REPO_ROOT}/dist/app/index.js" ]]; then
320
+ exec node "\${REPO_ROOT}/dist/app/index.js" "\$@"
321
+ fi
322
+ TSX_BIN="\${REPO_ROOT}/node_modules/tsx/dist/cli.mjs"
323
+ if [[ ! -f "\${TSX_BIN}" ]]; then
324
+ echo "[yips launcher] Missing tsx runtime at \${TSX_BIN}" >&2
325
+ echo "[yips launcher] Run: (cd \${REPO_ROOT} && npm install)" >&2
326
+ exit 1
327
+ fi
328
+ exec node "\${TSX_BIN}" "\${REPO_ROOT}/src/app/index.ts" "\$@"
329
+ EOF
330
+ chmod +x "${YIPS_LAUNCHER_PATH}"
331
+ log "Installed launcher: ${YIPS_LAUNCHER_PATH}"
332
+ }
333
+
334
+ update_yips_config() {
335
+ log "Normalizing ${YIPS_CONFIG_PATH}"
336
+ node - "${YIPS_CONFIG_PATH}" "${LLAMA_SERVER_BIN}" "${YIPS_MODELS_DIR}" <<'NODE'
337
+ const fs = require("node:fs");
338
+ const path = require("node:path");
339
+
340
+ const configPath = process.argv[2];
341
+ const llamaServerPath = process.argv[3];
342
+ const modelsDir = process.argv[4];
343
+
344
+ const defaults = {
345
+ streaming: true,
346
+ verbose: false,
347
+ backend: "llamacpp",
348
+ llamaBaseUrl: "http://127.0.0.1:8080",
349
+ llamaServerPath,
350
+ llamaModelsDir: modelsDir,
351
+ llamaHost: "127.0.0.1",
352
+ llamaPort: 8080,
353
+ llamaContextSize: 8192,
354
+ llamaGpuLayers: 999,
355
+ llamaAutoStart: true,
356
+ model: "default",
357
+ nicknames: {}
358
+ };
359
+
360
+ let current = {};
361
+ if (fs.existsSync(configPath)) {
362
+ try {
363
+ current = JSON.parse(fs.readFileSync(configPath, "utf8"));
364
+ } catch (error) {
365
+ console.warn(`[install][warn] Existing config unreadable, rewriting with defaults: ${String(error)}`);
366
+ current = {};
367
+ }
368
+ }
369
+
370
+ const merged = {
371
+ ...defaults,
372
+ ...current
373
+ };
374
+
375
+ if (typeof current.llamaServerPath !== "string" || current.llamaServerPath.trim().length === 0) {
376
+ merged.llamaServerPath = llamaServerPath;
377
+ }
378
+ if (typeof current.llamaModelsDir !== "string" || current.llamaModelsDir.trim().length === 0) {
379
+ merged.llamaModelsDir = modelsDir;
380
+ }
381
+ if (typeof current.llamaHost !== "string" || current.llamaHost.trim().length === 0) {
382
+ merged.llamaHost = "127.0.0.1";
383
+ }
384
+ if (!Number.isInteger(current.llamaPort) || current.llamaPort <= 0) {
385
+ merged.llamaPort = 8080;
386
+ }
387
+ if (typeof current.llamaBaseUrl !== "string" || current.llamaBaseUrl.trim().length === 0) {
388
+ merged.llamaBaseUrl = `http://${merged.llamaHost}:${merged.llamaPort}`;
389
+ }
390
+ if (!Number.isInteger(current.llamaContextSize) || current.llamaContextSize <= 0) {
391
+ merged.llamaContextSize = 8192;
392
+ }
393
+ if (!Number.isInteger(current.llamaGpuLayers) || current.llamaGpuLayers <= 0) {
394
+ merged.llamaGpuLayers = 999;
395
+ }
396
+ if (typeof current.llamaAutoStart !== "boolean") {
397
+ merged.llamaAutoStart = true;
398
+ }
399
+ if (!merged.nicknames || typeof merged.nicknames !== "object" || Array.isArray(merged.nicknames)) {
400
+ merged.nicknames = {};
401
+ }
402
+
403
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
404
+ fs.writeFileSync(configPath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
405
+ NODE
406
+ }
407
+
408
+ install_node_dependencies() {
409
+ ensure_node_runtime_healthy
410
+ log "Installing Node dependencies"
411
+ (cd "${REPO_ROOT}" && npm install)
412
+ }
413
+
414
+ count_models() {
415
+ find "${YIPS_MODELS_DIR}" -type f -name '*.gguf' 2>/dev/null | wc -l | tr -d ' '
416
+ }
417
+
418
+ print_summary() {
419
+ local models_count
420
+ models_count="$(count_models)"
421
+ log "Install complete."
422
+ echo
423
+ echo "Summary:"
424
+ echo " - llama-server: ${LLAMA_SERVER_BIN}"
425
+ echo " - yips launcher: ${YIPS_LAUNCHER_PATH}"
426
+ echo " - Yips env file: ${YIPS_ENV_FILE}"
427
+ echo " - Models dir: ${YIPS_MODELS_DIR}"
428
+ echo " - .yips_config.json: ${YIPS_CONFIG_PATH}"
429
+ echo " - GGUF models detected: ${models_count}"
430
+ echo
431
+ echo "Next:"
432
+ echo " 1) source \"${YIPS_ENV_FILE}\""
433
+ echo " 2) Run: yips"
434
+ echo " (launch from any directory; Yips keeps your current working directory)"
435
+ if [[ "${models_count}" == "0" ]]; then
436
+ echo " 3) In Yips, use /download (or /model) to fetch/select a GGUF model."
437
+ fi
438
+ }
439
+
440
+ main() {
441
+ parse_args "$@"
442
+ detect_platform
443
+ ensure_prerequisites
444
+ ensure_node_runtime_healthy
445
+ install_cuda_toolkit
446
+ setup_llama_repo
447
+ build_llama_cuda_then_fallback
448
+ validate_llama_server_binary
449
+ ensure_yips_dirs
450
+ write_env_file
451
+ install_node_dependencies
452
+ update_yips_config
453
+ install_yips_launcher
454
+ print_summary
455
+ }
456
+
457
+ main "$@"
package/package.json ADDED
@@ -0,0 +1,128 @@
1
+ {
2
+ "name": "@sheepbun/yips",
3
+ "version": "0.1.1",
4
+ "description": "Local-first AI code editor and self-hosted gateway (TypeScript rewrite).",
5
+ "license": "UNLICENSED",
6
+ "homepage": "https://yips.dev",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/sheepbun/yips.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/sheepbun/yips/issues"
13
+ },
14
+ "main": "dist/app/index.js",
15
+ "bin": {
16
+ "yips": "dist/app/index.js"
17
+ },
18
+ "files": [
19
+ "dist/**",
20
+ "install.sh"
21
+ ],
22
+ "imports": {
23
+ "#app/*": {
24
+ "development": "./src/app/*.ts",
25
+ "default": "./dist/app/*.js"
26
+ },
27
+ "#agent/conductor": {
28
+ "development": "./src/agent/conductor.ts",
29
+ "default": "./dist/agent/conductor.js"
30
+ },
31
+ "#agent/commands/*": {
32
+ "development": "./src/agent/commands/*.ts",
33
+ "default": "./dist/agent/commands/*.js"
34
+ },
35
+ "#agent/context/*": {
36
+ "development": "./src/agent/context/*.ts",
37
+ "default": "./dist/agent/context/*.js"
38
+ },
39
+ "#agent/protocol/*": {
40
+ "development": "./src/agent/protocol/*.ts",
41
+ "default": "./dist/agent/protocol/*.js"
42
+ },
43
+ "#agent/tools/*": {
44
+ "development": "./src/agent/tools/*.ts",
45
+ "default": "./dist/agent/tools/*.js"
46
+ },
47
+ "#agent/skills/*": {
48
+ "development": "./src/agent/skills/*.ts",
49
+ "default": "./dist/agent/skills/*.js"
50
+ },
51
+ "#config/*": {
52
+ "development": "./src/config/*.ts",
53
+ "default": "./dist/config/*.js"
54
+ },
55
+ "#gateway/*": {
56
+ "development": "./src/gateway/*.ts",
57
+ "default": "./dist/gateway/*.js"
58
+ },
59
+ "#llm/*": {
60
+ "development": "./src/llm/*.ts",
61
+ "default": "./dist/llm/*.js"
62
+ },
63
+ "#models/*": {
64
+ "development": "./src/models/*.ts",
65
+ "default": "./dist/models/*.js"
66
+ },
67
+ "#types/*": {
68
+ "development": "./src/types/*.ts",
69
+ "default": "./dist/types/*.js"
70
+ },
71
+ "#ui/*": {
72
+ "development": "./src/ui/*.ts",
73
+ "default": "./dist/ui/*.js"
74
+ },
75
+ "#ui/prompt/*": {
76
+ "development": "./src/ui/prompt/*.ts",
77
+ "default": "./dist/ui/prompt/*.js"
78
+ },
79
+ "#ui/input/*": {
80
+ "development": "./src/ui/input/*.ts",
81
+ "default": "./dist/ui/input/*.js"
82
+ },
83
+ "#ui/downloader/*": {
84
+ "development": "./src/ui/downloader/*.ts",
85
+ "default": "./dist/ui/downloader/*.js"
86
+ },
87
+ "#ui/model-manager/*": {
88
+ "development": "./src/ui/model-manager/*.ts",
89
+ "default": "./dist/ui/model-manager/*.js"
90
+ },
91
+ "#ui/tui/*": {
92
+ "development": "./src/ui/tui/*.ts",
93
+ "default": "./dist/ui/tui/*.js"
94
+ }
95
+ },
96
+ "engines": {
97
+ "node": ">=20.0.0"
98
+ },
99
+ "scripts": {
100
+ "build": "tsc -p tsconfig.build.json",
101
+ "dev": "tsx --conditions=development src/app/index.ts",
102
+ "gateway:discord": "tsx --conditions=development src/gateway/runtime/discord-main.ts",
103
+ "start": "node dist/app/index.js",
104
+ "typecheck": "tsc --noEmit -p tsconfig.json",
105
+ "test": "vitest run",
106
+ "test:watch": "vitest",
107
+ "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
108
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \".github/**/*.yml\" \"*.json\"",
109
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\" \".github/**/*.yml\" \"*.json\""
110
+ },
111
+ "devDependencies": {
112
+ "@types/node": "^22.13.4",
113
+ "@types/react": "^18.3.26",
114
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
115
+ "@typescript-eslint/parser": "^7.18.0",
116
+ "eslint": "^8.57.1",
117
+ "prettier": "^3.5.3",
118
+ "tsx": "^4.19.3",
119
+ "typescript": "^5.8.2",
120
+ "vitest": "^3.0.7"
121
+ },
122
+ "dependencies": {
123
+ "discord.js": "^14.22.1",
124
+ "ink": "^4.4.1",
125
+ "node-pty": "^1.1.0",
126
+ "react": "^18.3.1"
127
+ }
128
+ }