u-foo 2.4.5 → 2.4.7
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 +6 -8
- package/README.zh-CN.md +5 -5
- package/SKILLS/ufoo/SKILL.md +2 -2
- package/SKILLS/uinit/SKILL.md +8 -11
- package/package.json +3 -8
- package/scripts/postinstall.js +1 -21
- package/src/agents/launch/launcher.js +1 -13
- package/src/app/chat/commandExecutor.js +14 -9
- package/src/app/chat/commands.js +2 -2
- package/src/app/chat/daemonCoordinator.js +4 -0
- package/src/app/chat/daemonReconnect.js +17 -7
- package/src/app/cli/features/doctor.js +11 -18
- package/src/app/cli/features/init.js +12 -191
- package/src/app/cli/features/skills.js +0 -15
- package/src/app/cli/run.js +12 -7
- package/src/code/README.md +4 -4
- package/src/code/cli.js +1 -1
- package/src/code/launcher/ucode.js +18 -45
- package/src/code/skills/loader.js +0 -13
- package/src/coordination/context/doctor.js +6 -26
- package/src/online/server.js +1 -1
- package/src/runtime/daemon/index.js +1 -1
- package/src/runtime/daemon/mcpServer.js +1 -1
- package/src/runtime/daemon/restart.js +293 -0
- package/src/runtime/daemon/run.js +31 -37
- package/src/runtime/terminal/index.js +1 -1
- package/src/ui/MIGRATION.md +8 -10
- package/src/ui/ink/ChatApp.js +12 -6
- package/bin/ucode-core.js +0 -15
- package/bin/ufoo +0 -71
- package/modules/AGENTS.template.md +0 -8
- package/modules/bus/README.md +0 -140
- package/modules/context/README.md +0 -60
- package/modules/online/README.md +0 -92
- package/modules/resources/ICONS/README.md +0 -12
- package/modules/resources/ICONS/libraries/README.md +0 -17
- package/modules/resources/ICONS/libraries/heroicons/LICENSE +0 -22
- package/modules/resources/ICONS/libraries/heroicons/README.md +0 -15
- package/modules/resources/ICONS/libraries/heroicons/arrow-right.svg +0 -4
- package/modules/resources/ICONS/libraries/heroicons/check.svg +0 -4
- package/modules/resources/ICONS/libraries/heroicons/chevron-down.svg +0 -4
- package/modules/resources/ICONS/libraries/heroicons/cog-6-tooth.svg +0 -5
- package/modules/resources/ICONS/libraries/heroicons/magnifying-glass.svg +0 -4
- package/modules/resources/ICONS/libraries/heroicons/x-mark.svg +0 -4
- package/modules/resources/ICONS/libraries/lucide/LICENSE +0 -40
- package/modules/resources/ICONS/libraries/lucide/README.md +0 -15
- package/modules/resources/ICONS/libraries/lucide/arrow-right.svg +0 -15
- package/modules/resources/ICONS/libraries/lucide/check.svg +0 -14
- package/modules/resources/ICONS/libraries/lucide/chevron-down.svg +0 -14
- package/modules/resources/ICONS/libraries/lucide/search.svg +0 -15
- package/modules/resources/ICONS/libraries/lucide/settings.svg +0 -15
- package/modules/resources/ICONS/libraries/lucide/x.svg +0 -15
- package/modules/resources/ICONS/rules.md +0 -7
- package/modules/resources/README.md +0 -9
- package/modules/resources/UI/ANTI-PATTERNS.md +0 -6
- package/modules/resources/UI/TONE.md +0 -6
- package/scripts/chat-app-smoke.js +0 -30
- package/scripts/global-chat-switch-benchmark.js +0 -406
- package/scripts/ink-demo.js +0 -23
- package/scripts/ink-smoke.js +0 -30
- package/scripts/ucode-app-smoke.js +0 -36
- /package/{modules/bus/SKILLS → SKILLS}/ubus/SKILL.md +0 -0
- /package/{modules/context/SKILLS → SKILLS}/uctx/SKILL.md +0 -0
- /package/{modules/online/SKILLS → SKILLS}/ufoo-online/SKILL.md +0 -0
package/modules/bus/README.md
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
# bus
|
|
2
|
-
|
|
3
|
-
File-system based Agent event bus for async communication between multiple AI Coding Agents.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
bus solves communication problems in multi-agent collaboration:
|
|
8
|
-
|
|
9
|
-
- Multiple Claude Code instances collaborating on the same project
|
|
10
|
-
- Communication between different AI tools (Claude Code, Cursor, Copilot)
|
|
11
|
-
- Task delegation and response
|
|
12
|
-
- Broadcast messages
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
|
|
16
|
-
Initialize via ufoo:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
ufoo init --modules context,bus
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Directory Structure
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
.ufoo/
|
|
26
|
-
├── agent/
|
|
27
|
-
│ └── all-agents.json # Agent metadata + agent status
|
|
28
|
-
├── daemon/
|
|
29
|
-
│ ├── daemon.pid
|
|
30
|
-
│ ├── daemon.log
|
|
31
|
-
│ └── counts/
|
|
32
|
-
└── bus/
|
|
33
|
-
├── events/ # Event stream (JSONL, sharded by date)
|
|
34
|
-
├── offsets/ # Each Agent's consumption progress
|
|
35
|
-
└── queues/ # Targeted event queues
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Usage
|
|
39
|
-
|
|
40
|
-
### Join Bus
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
SUBSCRIBER="${UFOO_SUBSCRIBER_ID:-$(ufoo bus whoami 2>/dev/null || true)}"
|
|
44
|
-
[ -n "$SUBSCRIBER" ] || SUBSCRIBER=$(ufoo bus join | tail -n 1)
|
|
45
|
-
# Output: claude-code:a1b2c3 (or codex:def456)
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Check Pending Messages
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
ufoo bus check "$SUBSCRIBER"
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Send Messages
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
# Send to specific instance
|
|
58
|
-
ufoo bus send "claude-code:abc123" "Please help me review"
|
|
59
|
-
|
|
60
|
-
# Send to all instances of same type
|
|
61
|
-
ufoo bus send "claude-code" "Everyone please review"
|
|
62
|
-
|
|
63
|
-
# Broadcast to all
|
|
64
|
-
ufoo bus broadcast "I completed feature-x"
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### View Status
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
ufoo bus status
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Notifications/Alerts (no key injection, recommended)
|
|
74
|
-
|
|
75
|
-
If you want to receive "new message alerts" while running Codex/Claude in another terminal, use **agent-side alert/listen** (avoids IME/accessibility permission/window positioning fragmentation issues):
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
SUBSCRIBER="${UFOO_SUBSCRIBER_ID:-$(ufoo bus whoami 2>/dev/null || true)}"
|
|
79
|
-
[ -n "$SUBSCRIBER" ] || SUBSCRIBER=$(ufoo bus join | tail -n 1)
|
|
80
|
-
|
|
81
|
-
# Background alert: title badge + bell + optional macOS notification center
|
|
82
|
-
ufoo bus alert "$SUBSCRIBER" 1 --notify --daemon
|
|
83
|
-
|
|
84
|
-
# Or: foreground continuous print of new messages (suitable for a side terminal)
|
|
85
|
-
ufoo bus listen "$SUBSCRIBER" --from-beginning
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Unattended Auto-Execute (recommended)
|
|
89
|
-
|
|
90
|
-
If you need **Claude A to notify Claude B / Codex C and have the target auto-execute** (e.g., auto-trigger `/ubus`), use the bus daemon:
|
|
91
|
-
|
|
92
|
-
1) Resolve subscriber in each terminal session first (records `tty`, also records `TMUX_PANE` if in tmux). Join only as fallback:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
SUBSCRIBER="${UFOO_SUBSCRIBER_ID:-$(ufoo bus whoami 2>/dev/null || true)}"
|
|
96
|
-
[ -n "$SUBSCRIBER" ] || SUBSCRIBER=$(ufoo bus join | tail -n 1)
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
2) Start the bus daemon in the project (runs as background daemon):
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
ufoo bus daemon --interval 1 --daemon
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
3) After sending a message, the daemon injects `/ubus` into the target session and presses Enter:
|
|
106
|
-
- tmux: `send-keys`
|
|
107
|
-
- Terminal.app (pure Automation): `do script` (no Accessibility needed, but requires Automation authorization; compatibility depends on whether target program accepts input)
|
|
108
|
-
- Terminal.app (Accessibility): System Events (needs Accessibility), injection sequence is Escape + paste + Return (avoids IME issues)
|
|
109
|
-
|
|
110
|
-
Tips:
|
|
111
|
-
- Terminal.app backend depends on `tty` in `.ufoo/agent/all-agents.json`. Execute `join` in the target terminal session (ensure `tty` is not `not a tty`).
|
|
112
|
-
- Pure Automation backend needs one-time authorization: System Preferences → Privacy & Security → Automation (allow script to control Terminal).
|
|
113
|
-
- Accessibility backend needs one-time authorization: System Preferences → Privacy & Security → Accessibility (for Terminal / script host).
|
|
114
|
-
|
|
115
|
-
Stop/view status:
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
ufoo bus daemon --status
|
|
119
|
-
ufoo bus daemon --stop
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Subscriber ID Format
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
{agent_type}:{instance_id}
|
|
126
|
-
|
|
127
|
-
Examples:
|
|
128
|
-
claude-code:a1b2c3
|
|
129
|
-
cursor-ai:main
|
|
130
|
-
copilot:session1
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
## Relationship with context
|
|
134
|
-
|
|
135
|
-
| Module | Problem Solved |
|
|
136
|
-
|--------|----------------|
|
|
137
|
-
| context | Shared context, sparse decision log for major plan-level choices |
|
|
138
|
-
| bus | Real-time communication, task delegation, message passing |
|
|
139
|
-
|
|
140
|
-
Both are independent peer modules that can be used separately or together.
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# context
|
|
2
|
-
|
|
3
|
-
Decision-only context module for ufoo.
|
|
4
|
-
|
|
5
|
-
Purpose:
|
|
6
|
-
- Persist decisions in project workspaces
|
|
7
|
-
- Keep decision format canonical in `uctx` skill
|
|
8
|
-
|
|
9
|
-
Bus handles communication; context handles durable decision truth.
|
|
10
|
-
|
|
11
|
-
## Quick Start
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Install `ufoo` globally (once), then use it to install modules and init projects.
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
This repository is the `context` module. The recommended entrypoint is `ufoo`.
|
|
18
|
-
|
|
19
|
-
## Architecture
|
|
20
|
-
|
|
21
|
-
### Global: `~/.ufoo/` (read-only for agents, managed by humans)
|
|
22
|
-
|
|
23
|
-
Global modules live under `~/.ufoo/modules/`.
|
|
24
|
-
|
|
25
|
-
### Project: `<project>/.ufoo/context/` (writable)
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
.ufoo/context/
|
|
29
|
-
├── decisions/ # Append-only decision log (decision-only mode)
|
|
30
|
-
└── decisions.jsonl # Decision index (ts/type/file/author)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Should be in the project workspace and writable by agents.
|
|
34
|
-
Versioning is optional but recommended for auditability.
|
|
35
|
-
|
|
36
|
-
## Module Structure
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
context/ # This repo
|
|
40
|
-
├── README.md # This file
|
|
41
|
-
├── SKILLS/uctx/SKILL.md # Canonical decision format + workflow
|
|
42
|
-
└── .ufoo/context/ # Local project context for this repo (ignored; not part of protocol distribution)
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## For AI Agents
|
|
46
|
-
|
|
47
|
-
1. Read installed module from `~/.ufoo/modules/context/`
|
|
48
|
-
2. Read/write decisions in `<project>/.ufoo/context/decisions/`
|
|
49
|
-
3. **Never write to global** — only to project
|
|
50
|
-
4. Follow the decision format in `SKILLS/uctx/SKILL.md`
|
|
51
|
-
|
|
52
|
-
## Validate
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# protocol repo
|
|
56
|
-
ufoo ctx lint
|
|
57
|
-
|
|
58
|
-
# project-local context (in a real project repo)
|
|
59
|
-
ufoo ctx lint --project <path-to-project-context>
|
|
60
|
-
```
|
package/modules/online/README.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# online
|
|
2
|
-
|
|
3
|
-
WebSocket relay module for cross-machine agent collaboration. Extends the local ufoo bus to work over the network.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
online enables agents on different machines to collaborate:
|
|
8
|
-
|
|
9
|
-
- Public channel chat (broadcast to all connected agents)
|
|
10
|
-
- Private room collaboration (bus/decisions/wake sync)
|
|
11
|
-
- Token-based authentication
|
|
12
|
-
- Auto-reconnect with exponential backoff
|
|
13
|
-
|
|
14
|
-
## Quick Start
|
|
15
|
-
|
|
16
|
-
### 1. Start a relay server
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
ufoo online server --port 8787
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 2. Connect an agent
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# Join a public channel
|
|
26
|
-
ufoo online connect --nickname my-agent --join lobby
|
|
27
|
-
|
|
28
|
-
# Join a private room
|
|
29
|
-
ufoo online connect --nickname my-agent --room room_001 --room-password secret
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### 3. Send messages
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# To a channel
|
|
36
|
-
ufoo online send --nickname my-agent --channel lobby --text "hello everyone"
|
|
37
|
-
|
|
38
|
-
# To a room
|
|
39
|
-
ufoo online send --nickname my-agent --room room_001 --text "hello team"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### 4. Check inbox
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
ufoo online inbox my-agent # All messages
|
|
46
|
-
ufoo online inbox my-agent --unread # Unread only
|
|
47
|
-
ufoo online inbox my-agent --clear # Clear inbox
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Private Room Sync
|
|
51
|
-
|
|
52
|
-
In private room mode, agents automatically sync:
|
|
53
|
-
|
|
54
|
-
- **Bus messages** — local bus ↔ online relay, bidirectional
|
|
55
|
-
- **Decisions** — new `.md` files synced across team
|
|
56
|
-
- **Wake events** — remote agent can wake local agent via bus
|
|
57
|
-
|
|
58
|
-
## HTTP APIs (for web preview)
|
|
59
|
-
|
|
60
|
-
Auth-required management APIs:
|
|
61
|
-
|
|
62
|
-
- `GET/POST /ufoo/online/channels`
|
|
63
|
-
- `GET/POST /ufoo/online/rooms`
|
|
64
|
-
|
|
65
|
-
Public read-only preview APIs (no bearer token required):
|
|
66
|
-
|
|
67
|
-
- `GET /ufoo/online/public/channels`
|
|
68
|
-
- `GET /ufoo/online/public/rooms?type=private`
|
|
69
|
-
- `GET /ufoo/online/public/channels/:channel/messages?limit=120`
|
|
70
|
-
|
|
71
|
-
Notes:
|
|
72
|
-
|
|
73
|
-
- Channel history is in-memory (rolling buffer) on relay server.
|
|
74
|
-
- Private room public API only exposes metadata (`room_id`, `name`, `created_by`, `password_required`).
|
|
75
|
-
|
|
76
|
-
## Storage
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
~/.ufoo/online/
|
|
80
|
-
├── tokens.json # Auth tokens
|
|
81
|
-
├── inbox/<nickname>.jsonl # Incoming messages
|
|
82
|
-
└── outbox/<nickname>.jsonl # Queued outgoing messages
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Relationship with bus
|
|
86
|
-
|
|
87
|
-
| Module | Scope |
|
|
88
|
-
|--------|-------|
|
|
89
|
-
| bus | Local file-system based messaging within a single machine |
|
|
90
|
-
| online | Network relay extending bus across machines via WebSocket |
|
|
91
|
-
|
|
92
|
-
online builds on top of bus — local agents still communicate via the file-system bus, while online bridges messages to remote agents.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Icon Context
|
|
2
|
-
|
|
3
|
-
Icons here define visual grammar, not shippable assets.
|
|
4
|
-
|
|
5
|
-
They are used as:
|
|
6
|
-
- Reference bases
|
|
7
|
-
- Modification sources
|
|
8
|
-
- Style constraints
|
|
9
|
-
|
|
10
|
-
Do not copy blindly into projects.
|
|
11
|
-
|
|
12
|
-
`libraries/` contains minimal subsets of third-party icon libraries (with licenses) as reference material.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Icon Libraries (Minimal Subsets)
|
|
2
|
-
|
|
3
|
-
This directory vendors **small, representative subsets** of third-party icon libraries.
|
|
4
|
-
|
|
5
|
-
Purpose:
|
|
6
|
-
- Provide strong, unambiguous signal that icons are **canonical protocol context**
|
|
7
|
-
- Serve as reference bases and modification sources
|
|
8
|
-
|
|
9
|
-
Non-goals:
|
|
10
|
-
- Shipping assets for products
|
|
11
|
-
- Full icon sets
|
|
12
|
-
|
|
13
|
-
Each library subfolder contains:
|
|
14
|
-
- A minimal set of SVGs
|
|
15
|
-
- The upstream license text
|
|
16
|
-
- A short README with source info
|
|
17
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) Tailwind Labs, Inc.
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
22
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Heroicons (Minimal Subset)
|
|
2
|
-
|
|
3
|
-
Source:
|
|
4
|
-
- Repository: https://github.com/tailwindlabs/heroicons
|
|
5
|
-
- Path: `optimized/24/outline/`
|
|
6
|
-
- License: MIT (see `LICENSE`)
|
|
7
|
-
- Fetched: 2026-01-27
|
|
8
|
-
|
|
9
|
-
Included icons:
|
|
10
|
-
- `arrow-right.svg`
|
|
11
|
-
- `chevron-down.svg`
|
|
12
|
-
- `magnifying-glass.svg`
|
|
13
|
-
- `cog-6-tooth.svg`
|
|
14
|
-
- `check.svg`
|
|
15
|
-
- `x-mark.svg`
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
|
|
2
|
-
<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/>
|
|
3
|
-
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/>
|
|
4
|
-
</svg>
|
|
5
|
-
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
|
|
2
|
-
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"/>
|
|
3
|
-
</svg>
|
|
4
|
-
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
ISC License
|
|
2
|
-
|
|
3
|
-
Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2026 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2026.
|
|
4
|
-
|
|
5
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
copyright notice and this permission notice appear in all copies.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
The MIT License (MIT) (for portions derived from Feather)
|
|
20
|
-
|
|
21
|
-
Copyright (c) 2013-2026 Cole Bemis
|
|
22
|
-
|
|
23
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
24
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
25
|
-
in the Software without restriction, including without limitation the rights
|
|
26
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
27
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
28
|
-
furnished to do so, subject to the following conditions:
|
|
29
|
-
|
|
30
|
-
The above copyright notice and this permission notice shall be included in all
|
|
31
|
-
copies or substantial portions of the Software.
|
|
32
|
-
|
|
33
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
34
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
35
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
36
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
37
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
38
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
39
|
-
SOFTWARE.
|
|
40
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Lucide (Minimal Subset)
|
|
2
|
-
|
|
3
|
-
Source:
|
|
4
|
-
- Repository: https://github.com/lucide-icons/lucide
|
|
5
|
-
- Path: `icons/`
|
|
6
|
-
- License: ISC (see `LICENSE`)
|
|
7
|
-
- Fetched: 2026-01-27
|
|
8
|
-
|
|
9
|
-
Included icons:
|
|
10
|
-
- `arrow-right.svg`
|
|
11
|
-
- `chevron-down.svg`
|
|
12
|
-
- `search.svg`
|
|
13
|
-
- `settings.svg`
|
|
14
|
-
- `check.svg`
|
|
15
|
-
- `x.svg`
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
-
width="24"
|
|
4
|
-
height="24"
|
|
5
|
-
viewBox="0 0 24 24"
|
|
6
|
-
fill="none"
|
|
7
|
-
stroke="currentColor"
|
|
8
|
-
stroke-width="2"
|
|
9
|
-
stroke-linecap="round"
|
|
10
|
-
stroke-linejoin="round"
|
|
11
|
-
>
|
|
12
|
-
<path d="M5 12h14" />
|
|
13
|
-
<path d="m12 5 7 7-7 7" />
|
|
14
|
-
</svg>
|
|
15
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
-
width="24"
|
|
4
|
-
height="24"
|
|
5
|
-
viewBox="0 0 24 24"
|
|
6
|
-
fill="none"
|
|
7
|
-
stroke="currentColor"
|
|
8
|
-
stroke-width="2"
|
|
9
|
-
stroke-linecap="round"
|
|
10
|
-
stroke-linejoin="round"
|
|
11
|
-
>
|
|
12
|
-
<path d="m21 21-4.34-4.34" />
|
|
13
|
-
<circle cx="11" cy="11" r="8" />
|
|
14
|
-
</svg>
|
|
15
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
-
width="24"
|
|
4
|
-
height="24"
|
|
5
|
-
viewBox="0 0 24 24"
|
|
6
|
-
fill="none"
|
|
7
|
-
stroke="currentColor"
|
|
8
|
-
stroke-width="2"
|
|
9
|
-
stroke-linecap="round"
|
|
10
|
-
stroke-linejoin="round"
|
|
11
|
-
>
|
|
12
|
-
<path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" />
|
|
13
|
-
<circle cx="12" cy="12" r="3" />
|
|
14
|
-
</svg>
|
|
15
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
-
width="24"
|
|
4
|
-
height="24"
|
|
5
|
-
viewBox="0 0 24 24"
|
|
6
|
-
fill="none"
|
|
7
|
-
stroke="currentColor"
|
|
8
|
-
stroke-width="2"
|
|
9
|
-
stroke-linecap="round"
|
|
10
|
-
stroke-linejoin="round"
|
|
11
|
-
>
|
|
12
|
-
<path d="M18 6 6 18" />
|
|
13
|
-
<path d="m6 6 12 12" />
|
|
14
|
-
</svg>
|
|
15
|
-
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# resources
|
|
2
|
-
|
|
3
|
-
Optional resources for AI-assisted coding workflows.
|
|
4
|
-
|
|
5
|
-
This repository intentionally contains non-core materials such as:
|
|
6
|
-
- `UI/` tone + anti-pattern references
|
|
7
|
-
- `ICONS/` reference icon subsets (with licenses)
|
|
8
|
-
|
|
9
|
-
It is designed to be installed and managed by `ufoo` under `~/.ufoo/modules/resources`.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Headless mount test for the ChatApp shell. Boots the ink TUI with stub
|
|
5
|
-
* props (no daemon, no real bootstrap) and checks the component tree
|
|
6
|
-
* renders without throwing. Used for CI parity with ucode-app-smoke.js.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const { runInk } = require("../src/ui/runInk");
|
|
10
|
-
const { createChatApp } = require("../src/ui/ink/ChatApp");
|
|
11
|
-
|
|
12
|
-
(async () => {
|
|
13
|
-
const props = {
|
|
14
|
-
activeProjectRoot: process.cwd(),
|
|
15
|
-
globalMode: false,
|
|
16
|
-
globalScope: "project",
|
|
17
|
-
};
|
|
18
|
-
const handle = await runInk((React, ink) => {
|
|
19
|
-
const ChatApp = createChatApp({ React, ink, props, interactive: false });
|
|
20
|
-
return React.createElement(ChatApp);
|
|
21
|
-
}, { stdout: process.stdout, stderr: process.stderr });
|
|
22
|
-
await new Promise((r) => setTimeout(r, 80));
|
|
23
|
-
handle.unmount();
|
|
24
|
-
await handle.waitUntilExit().catch(() => undefined);
|
|
25
|
-
process.stdout.write("\nchat-app-smoke: ok\n");
|
|
26
|
-
process.exit(0);
|
|
27
|
-
})().catch((err) => {
|
|
28
|
-
process.stderr.write(`chat-app-smoke: failed: ${err && err.stack || err}\n`);
|
|
29
|
-
process.exit(1);
|
|
30
|
-
});
|