u-foo 1.0.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.
Files changed (77) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +163 -0
  3. package/README.zh-CN.md +163 -0
  4. package/bin/uclaude +65 -0
  5. package/bin/ucodex +65 -0
  6. package/bin/ufoo +93 -0
  7. package/bin/ufoo.js +35 -0
  8. package/modules/AGENTS.template.md +87 -0
  9. package/modules/bus/README.md +132 -0
  10. package/modules/bus/SKILLS/ubus/SKILL.md +209 -0
  11. package/modules/bus/scripts/bus-alert.sh +185 -0
  12. package/modules/bus/scripts/bus-listen.sh +117 -0
  13. package/modules/context/ASSUMPTIONS.md +7 -0
  14. package/modules/context/CONSTRAINTS.md +7 -0
  15. package/modules/context/CONTEXT-STRUCTURE.md +49 -0
  16. package/modules/context/DECISION-PROTOCOL.md +62 -0
  17. package/modules/context/HANDOFF.md +33 -0
  18. package/modules/context/README.md +82 -0
  19. package/modules/context/RULES.md +15 -0
  20. package/modules/context/SKILLS/README.md +14 -0
  21. package/modules/context/SKILLS/uctx/SKILL.md +91 -0
  22. package/modules/context/SYSTEM.md +18 -0
  23. package/modules/context/TEMPLATES/assumptions.md +4 -0
  24. package/modules/context/TEMPLATES/constraints.md +4 -0
  25. package/modules/context/TEMPLATES/decision.md +16 -0
  26. package/modules/context/TEMPLATES/project-context-readme.md +6 -0
  27. package/modules/context/TEMPLATES/system.md +3 -0
  28. package/modules/context/TEMPLATES/terminology.md +4 -0
  29. package/modules/context/TERMINOLOGY.md +10 -0
  30. package/modules/resources/ICONS/README.md +12 -0
  31. package/modules/resources/ICONS/libraries/README.md +17 -0
  32. package/modules/resources/ICONS/libraries/heroicons/LICENSE +22 -0
  33. package/modules/resources/ICONS/libraries/heroicons/README.md +15 -0
  34. package/modules/resources/ICONS/libraries/heroicons/arrow-right.svg +4 -0
  35. package/modules/resources/ICONS/libraries/heroicons/check.svg +4 -0
  36. package/modules/resources/ICONS/libraries/heroicons/chevron-down.svg +4 -0
  37. package/modules/resources/ICONS/libraries/heroicons/cog-6-tooth.svg +5 -0
  38. package/modules/resources/ICONS/libraries/heroicons/magnifying-glass.svg +4 -0
  39. package/modules/resources/ICONS/libraries/heroicons/x-mark.svg +4 -0
  40. package/modules/resources/ICONS/libraries/lucide/LICENSE +40 -0
  41. package/modules/resources/ICONS/libraries/lucide/README.md +15 -0
  42. package/modules/resources/ICONS/libraries/lucide/arrow-right.svg +15 -0
  43. package/modules/resources/ICONS/libraries/lucide/check.svg +14 -0
  44. package/modules/resources/ICONS/libraries/lucide/chevron-down.svg +14 -0
  45. package/modules/resources/ICONS/libraries/lucide/search.svg +15 -0
  46. package/modules/resources/ICONS/libraries/lucide/settings.svg +15 -0
  47. package/modules/resources/ICONS/libraries/lucide/x.svg +15 -0
  48. package/modules/resources/ICONS/rules.md +7 -0
  49. package/modules/resources/README.md +9 -0
  50. package/modules/resources/UI/ANTI-PATTERNS.md +6 -0
  51. package/modules/resources/UI/TONE.md +6 -0
  52. package/package.json +40 -0
  53. package/scripts/banner.sh +89 -0
  54. package/scripts/bus-alert.sh +6 -0
  55. package/scripts/bus-autotrigger.sh +6 -0
  56. package/scripts/bus-daemon.sh +231 -0
  57. package/scripts/bus-inject.sh +144 -0
  58. package/scripts/bus-listen.sh +6 -0
  59. package/scripts/bus.sh +984 -0
  60. package/scripts/context-decisions.sh +167 -0
  61. package/scripts/context-doctor.sh +72 -0
  62. package/scripts/context-lint.sh +110 -0
  63. package/scripts/doctor.sh +22 -0
  64. package/scripts/init.sh +247 -0
  65. package/scripts/skills.sh +113 -0
  66. package/scripts/status.sh +125 -0
  67. package/src/agent/cliRunner.js +190 -0
  68. package/src/agent/internalRunner.js +212 -0
  69. package/src/agent/normalizeOutput.js +41 -0
  70. package/src/agent/ufooAgent.js +222 -0
  71. package/src/chat/index.js +1603 -0
  72. package/src/cli.js +349 -0
  73. package/src/config.js +37 -0
  74. package/src/daemon/index.js +501 -0
  75. package/src/daemon/ops.js +120 -0
  76. package/src/daemon/run.js +41 -0
  77. package/src/daemon/status.js +78 -0
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # bus-listen.sh
5
+ # Foreground listener that prints incoming messages.
6
+ #
7
+ # Usage:
8
+ # bash bus-listen.sh <subscriber> [options]
9
+ #
10
+ # Options:
11
+ # --from-beginning Print existing queued messages first
12
+ # --reset Truncate pending queue before listening
13
+ # --auto-join Auto-join bus to get subscriber ID
14
+
15
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
17
+ BUS_DIR=".ufoo/bus"
18
+ FROM_BEGINNING=0
19
+ RESET=0
20
+ AUTO_JOIN=0
21
+
22
+ SUBSCRIBER="${1:-}"
23
+ shift || true
24
+
25
+ while [[ $# -gt 0 ]]; do
26
+ case "$1" in
27
+ --from-beginning)
28
+ FROM_BEGINNING=1
29
+ shift
30
+ ;;
31
+ --reset)
32
+ RESET=1
33
+ shift
34
+ ;;
35
+ --auto-join)
36
+ AUTO_JOIN=1
37
+ shift
38
+ ;;
39
+ *)
40
+ shift
41
+ ;;
42
+ esac
43
+ done
44
+
45
+ # Auto-join if requested
46
+ if [[ "$AUTO_JOIN" == "1" ]] && [[ -z "$SUBSCRIBER" ]]; then
47
+ SUBSCRIBER="$(ufoo bus join 2>/dev/null | tail -1)"
48
+ echo "[listen] Auto-joined as: $SUBSCRIBER"
49
+ fi
50
+
51
+ if [[ -z "$SUBSCRIBER" ]]; then
52
+ echo "Usage: bus-listen.sh <subscriber> [options]" >&2
53
+ echo " or: bus-listen.sh --auto-join" >&2
54
+ exit 1
55
+ fi
56
+
57
+ # Sanitize subscriber for filename
58
+ SAFE_SUB="${SUBSCRIBER//:/_}"
59
+ QUEUE_FILE="$BUS_DIR/queues/${SAFE_SUB}/pending.jsonl"
60
+ QUEUE_DIR="$BUS_DIR/queues/${SAFE_SUB}"
61
+
62
+ mkdir -p "$QUEUE_DIR"
63
+ touch "$QUEUE_FILE"
64
+
65
+ # Reset queue if requested
66
+ if [[ "$RESET" == "1" ]]; then
67
+ echo "[listen] Resetting queue..."
68
+ : > "$QUEUE_FILE"
69
+ fi
70
+
71
+ # Print existing messages if requested
72
+ if [[ "$FROM_BEGINNING" == "1" ]] && [[ -s "$QUEUE_FILE" ]]; then
73
+ echo "[listen] Existing messages:"
74
+ echo "---"
75
+ while IFS= read -r line; do
76
+ # Parse JSON and extract message
77
+ msg="$(echo "$line" | jq -r '.data.message // .data // .' 2>/dev/null || echo "$line")"
78
+ from="$(echo "$line" | jq -r '.publisher // "unknown"' 2>/dev/null || echo "unknown")"
79
+ ts="$(echo "$line" | jq -r '.ts // ""' 2>/dev/null || echo "")"
80
+ short_ts="${ts:11:8}" # Extract HH:MM:SS
81
+ echo "[$short_ts] <$from> $msg"
82
+ done < "$QUEUE_FILE"
83
+ echo "---"
84
+ fi
85
+
86
+ echo "[listen] Listening for new messages... (Ctrl+C to stop)"
87
+
88
+ # Track last line count
89
+ LAST_LINES=0
90
+ if [[ -s "$QUEUE_FILE" ]]; then
91
+ LAST_LINES="$(wc -l < "$QUEUE_FILE" | tr -d ' ')"
92
+ fi
93
+
94
+ while true; do
95
+ if [[ -f "$QUEUE_FILE" ]]; then
96
+ CURRENT_LINES="$(wc -l < "$QUEUE_FILE" | tr -d ' ')"
97
+
98
+ if [[ "$CURRENT_LINES" -gt "$LAST_LINES" ]]; then
99
+ # Read new lines
100
+ tail -n "+$((LAST_LINES + 1))" "$QUEUE_FILE" | while IFS= read -r line; do
101
+ msg="$(echo "$line" | jq -r '.data.message // .data // .' 2>/dev/null || echo "$line")"
102
+ from="$(echo "$line" | jq -r '.publisher // "unknown"' 2>/dev/null || echo "unknown")"
103
+ ts="$(echo "$line" | jq -r '.ts // ""' 2>/dev/null || echo "")"
104
+ short_ts="${ts:11:8}"
105
+
106
+ # Bell notification
107
+ printf '\a'
108
+
109
+ echo "[$short_ts] <$from> $msg"
110
+ done
111
+
112
+ LAST_LINES="$CURRENT_LINES"
113
+ fi
114
+ fi
115
+
116
+ sleep 1
117
+ done
@@ -0,0 +1,7 @@
1
+ # Assumptions
2
+
3
+ - Users work with multiple AI tools
4
+ - AI agents can read markdown files
5
+ - AI agents respect explicit file instructions
6
+ - Written context survives session boundaries
7
+ - Less structure is better than over-engineering
@@ -0,0 +1,7 @@
1
+ # Constraints
2
+
3
+ - Model-agnostic (no Claude/GPT-specific instructions)
4
+ - Project-agnostic (no specific tech stack assumptions)
5
+ - Files are authoritative, not conversations
6
+ - Decisions are append-only
7
+ - All rules must be enforceable by file inspection
@@ -0,0 +1,49 @@
1
+ # Context Structure
2
+
3
+ ## Global (read-only)
4
+
5
+ ```
6
+ ~/.ufoo/
7
+ └── modules/
8
+ └── context/ # installed context module
9
+ ```
10
+
11
+ - **Read-only**
12
+ - Template source for init
13
+ - No decisions, no assumptions
14
+ - Law, not truth
15
+
16
+ ## Project-local (writable)
17
+
18
+ ```
19
+ <project>/
20
+ └── .context/
21
+ ├── README.md
22
+ ├── SYSTEM.md
23
+ ├── CONSTRAINTS.md
24
+ ├── ASSUMPTIONS.md
25
+ ├── TERMINOLOGY.md
26
+ └── DECISIONS/
27
+ ```
28
+
29
+ - **In the repo** — can diff, can review
30
+ - This is where truth lives
31
+ - Must be versionable
32
+
33
+ ## Required files (project)
34
+
35
+ | File | Purpose |
36
+ |------|---------|
37
+ | README.md | Entry point; how to use this context |
38
+ | SYSTEM.md | Project architecture and purpose |
39
+ | CONSTRAINTS.md | Non-negotiable rules |
40
+ | ASSUMPTIONS.md | Current assumptions (update when changed) |
41
+ | TERMINOLOGY.md | Shared vocabulary |
42
+ | DECISIONS/ | Append-only decision log |
43
+
44
+ ## Red line
45
+
46
+ **Never write decisions or assumptions to global.**
47
+
48
+ Global = law.
49
+ Project = truth.
@@ -0,0 +1,62 @@
1
+ # Decision Protocol
2
+
3
+ ## What is a Decision?
4
+
5
+ A decision is any new or changed “shared truth” that affects future work, including:
6
+ - Architecture
7
+ - Semantics
8
+ - Roles or responsibilities
9
+ - UI meaning or behavior
10
+ - Naming or structure
11
+ - Installation / distribution / tooling workflows
12
+ - Trade-offs and “we chose X over Y”
13
+
14
+ ## Triage (Must / Ask / Skip)
15
+
16
+ ### Must record (no confirmation needed)
17
+
18
+ Write a decision **before replying** when you do any of the following:
19
+
20
+ - Provide an evaluation / analysis / recommendation that could steer future work
21
+ - Propose an improvement plan or a set of next steps
22
+ - Introduce or change any rule/constraint/process
23
+ - Choose a default (e.g. install method, folder structure, version pinning policy)
24
+ - Decide between alternatives (trade-off)
25
+
26
+ ### Ask first (medium importance)
27
+
28
+ If you’re unsure whether the recommendation should become shared truth, ask:
29
+
30
+ > “Should I record a decision for X?”
31
+
32
+ Examples:
33
+ - Optional refactors or style preferences
34
+ - Suggestions that depend on missing info (URL, constraints, team preference)
35
+ - Reversible tweaks that may not be adopted
36
+
37
+ ### Skip (not worth a decision)
38
+
39
+ Do **not** write a decision for:
40
+
41
+ - One-off clarifications or Q&A that doesn’t change future behavior
42
+ - Trivial edits (formatting, typos) with no semantic impact
43
+ - Ephemeral runtime details (logs, transient errors) unless they affect policy
44
+
45
+ ## Where Decisions Live
46
+
47
+ - **Never** write decisions to global `~/.context/` (global = law).
48
+ - Always write decisions to the project-local log:
49
+ - `<project>/.context/DECISIONS/`
50
+ - For this repo, that is: `.context/DECISIONS/`
51
+
52
+ ## Rules
53
+
54
+ - Decisions are append-only.
55
+ - Do not rewrite history.
56
+ - AI agents are allowed to write decisions.
57
+
58
+ ## Minimum Content
59
+
60
+ - Context: why this matters now
61
+ - Decision: what is now considered true
62
+ - Implications: what must follow from this
@@ -0,0 +1,33 @@
1
+ # AI Handoff Protocol
2
+
3
+ ## When taking over work
4
+
5
+ 1. Read this repository (global protocol).
6
+ 2. Read the project-local `.context/`.
7
+ 3. Check for open decisions: `bash scripts/context-decisions.sh -l`
8
+
9
+ ## Processing open decisions
10
+
11
+ Open decisions are messages from other agents. You MUST:
12
+
13
+ 1. **Read** — Read the full content, not just the title.
14
+ 2. **Understand** — Sync their decisions to your understanding.
15
+ 3. **Execute** — If action is required, do it first.
16
+ 4. **Verify** — Confirm the action succeeded.
17
+ 5. **Resolve** — Only then mark as resolved.
18
+
19
+ ```yaml
20
+ ---
21
+ status: resolved
22
+ resolved_by: <your-agent-name>
23
+ resolved_at: <date>
24
+ ---
25
+ ```
26
+
27
+ **NEVER resolve blindly.** This defeats the purpose of multi-agent collaboration.
28
+
29
+ ## Before finishing work
30
+
31
+ - Declare whether any new decisions were introduced.
32
+ - Ensure all decisions are written down.
33
+ - Leave the project ready for the next agent.
@@ -0,0 +1,82 @@
1
+ # context
2
+
3
+ A collaboration protocol that constrains AI behavior through explicit, versioned files.
4
+
5
+ ## Why
6
+
7
+ AI coding agents (Claude Code, Codex, Cursor, etc.) have two fundamental problems:
8
+
9
+ 1. **No shared memory** — Decisions made in one session are invisible to other agents or future sessions. Each agent starts fresh, repeating mistakes or contradicting prior work.
10
+
11
+ This protocol solves it by treating decisions and context as files:
12
+ - **Decisions as files** — Persistent, versioned, reviewable. All agents read the same truth.
13
+
14
+ ## Core Principle
15
+
16
+ ```
17
+ Global context defines the law.
18
+ Project context defines the truth.
19
+ ```
20
+
21
+ **Files are truth, not memory.**
22
+
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ # Install `ufoo` globally (once), then use it to install modules and init projects.
27
+ ```
28
+
29
+ This repository is the `context` module. The recommended entrypoint is `ufoo`.
30
+
31
+ ## Architecture
32
+
33
+ ### Global: `~/.ufoo/` (read-only for agents, managed by humans)
34
+
35
+ Global modules live under `~/.ufoo/modules/`.
36
+
37
+ ### Project: `<project>/.context/` (writable)
38
+
39
+ ```
40
+ .context/
41
+ ├── README.md # Entry point / how to use this context
42
+ ├── SYSTEM.md # Project architecture
43
+ ├── CONSTRAINTS.md # Non-negotiable rules
44
+ ├── ASSUMPTIONS.md # Current assumptions
45
+ ├── TERMINOLOGY.md # Shared vocabulary
46
+ └── DECISIONS/ # Append-only log
47
+ ```
48
+
49
+ Must be in Git. Must be reviewable. Truth.
50
+
51
+ ## Protocol Structure
52
+
53
+ ```
54
+ context/ # This repo
55
+ ├── SYSTEM.md # Protocol definition
56
+ ├── RULES.md # Collaboration rules
57
+ ├── CONSTRAINTS.md # Protocol constraints
58
+ ├── DECISION-PROTOCOL.md # How to write decisions
59
+ ├── HANDOFF.md # Session handoff rules
60
+ ├── CONTEXT-STRUCTURE.md # Project structure spec
61
+ ├── TEMPLATES/ # AI behavior constraint
62
+ ├── SKILLS/ # tool skill docs (module-local)
63
+ └── .context/ # Local project context for this repo (ignored; not part of protocol distribution)
64
+ ```
65
+
66
+ ## For AI Agents
67
+
68
+ 1. Read installed module from `~/.ufoo/modules/context/`
69
+ 2. Read/write context from `<project>/.context/`
70
+ 3. **Never write to global** — only to project
71
+ 4. When unsure, write a decision
72
+ 5. Do not modify TEMPLATES/ without a decision
73
+
74
+ ## Validate
75
+
76
+ ```bash
77
+ # protocol repo
78
+ ufoo ctx lint
79
+
80
+ # project-local context (in a real project repo)
81
+ ufoo ctx lint --project <path-to-project-context>
82
+ ```
@@ -0,0 +1,15 @@
1
+ # Collaboration Rules
2
+
3
+ ## Core rules
4
+
5
+ - Always read this repository before coding.
6
+ - Do not rely on model-internal memory.
7
+ - All shared understanding must exist as files.
8
+ - Decisions override comments and discussions.
9
+ - When unsure, write a decision.
10
+
11
+ ## Decision handling
12
+
13
+ - Open decisions are unprocessed messages from other agents.
14
+ - You must read, understand, and act before resolving.
15
+ - Never resolve without reading the full content.
@@ -0,0 +1,14 @@
1
+ # Skills
2
+
3
+ Protocol-level skills that enforce context rules.
4
+
5
+ - NOT memory systems
6
+ - Do NOT store project knowledge
7
+ - Only bootstrap and validate protocol compliance
8
+
9
+ Available:
10
+ - `uctx` — quick context check (list decisions, show latest, report status)
11
+
12
+ Helpers:
13
+ - `bash scripts/skills.sh list`
14
+ - `bash scripts/skills.sh install <name|all> --codex|--agents|--target <dir>`
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: uctx
3
+ description: |
4
+ Quick ufoo context status check. Shows decisions and context health.
5
+ Use when: (1) Starting a session, (2) User says "uctx", (3) Need quick context refresh.
6
+ For full initialization, use uinit (ufoo init CLI).
7
+ ---
8
+
9
+ # /uctx - AI Context Quick Check
10
+
11
+ ## What this does
12
+
13
+ Fast context check for daily use. Run at session start or anytime.
14
+
15
+ Pre-flight reminder:
16
+ - If the user is asking for evaluation/recommendation/plan, write a decision before replying.
17
+
18
+ ## Workflow
19
+
20
+ ### 1. Verify structure exists
21
+
22
+ Check `.ufoo/context/` exists. If missing, tell user to run `uinit` (ufoo init CLI).
23
+
24
+ ### 2. List all decisions
25
+
26
+ ```bash
27
+ ufoo ctx decisions -l
28
+ ```
29
+
30
+ ### 3. Show latest decision
31
+
32
+ ```bash
33
+ ufoo ctx decisions -n 1
34
+ ```
35
+
36
+ ### 4. Report status
37
+
38
+ Brief summary:
39
+ - Open decisions count (need attention)
40
+ - Total decisions count
41
+ - Any issues found
42
+ - Ready to work
43
+
44
+ ## Output format
45
+
46
+ ```
47
+ === ufoo context status ===
48
+ Project: <cwd>
49
+ Decisions: N open, M total
50
+ Latest open: DECISION XXXX: <title>
51
+
52
+ [Latest decision content]
53
+
54
+ Status: Ready ✓
55
+ ```
56
+
57
+ ## Handling Open Decisions
58
+
59
+ When there are open decisions, you MUST:
60
+
61
+ ### 1. Read and understand
62
+ - Read the full content of each open decision
63
+ - Understand what other agents decided
64
+ - This is "syncing their memory to yours"
65
+
66
+ ### 2. Check if action needed
67
+ - Does the decision require implementation?
68
+ - Is something already done that needs verification?
69
+ - Are there implications you need to follow?
70
+
71
+ ### 3. Execute if needed
72
+ - If the decision requires action, do it first
73
+ - Verify the action was successful
74
+
75
+ ### 4. Then resolve
76
+ Only after understanding and completing any required actions:
77
+ ```yaml
78
+ ---
79
+ status: resolved
80
+ resolved_by: <your-agent-name>
81
+ resolved_at: <date>
82
+ ---
83
+ ```
84
+
85
+ **NEVER resolve blindly.** Reading the title is not enough.
86
+
87
+ ## Notes
88
+
89
+ - Script defaults to showing only `open` decisions
90
+ - Resolved decisions are skipped (already processed)
91
+ - Use `-s all` to see all decisions regardless of status
@@ -0,0 +1,18 @@
1
+ # AI System Contract
2
+
3
+ This repository defines the canonical collaboration context
4
+ for all AI agents working on a codebase.
5
+
6
+ ## Purpose
7
+
8
+ Solve one core problem with AI coding agents:
9
+
10
+ 1. **Memory sync across agents** — Multiple AI tools (Claude Code, Codex, Cursor, etc.) have no shared memory. Decisions made in one session are lost to others. This protocol makes decisions persist as files, enabling true multi-agent collaboration.
11
+
12
+ ## Rules
13
+
14
+ - Files in this repository are authoritative.
15
+ - Constraints are hard requirements, not suggestions.
16
+ - Silent architectural or semantic decisions are forbidden.
17
+ - If conflict or ambiguity exists, stop and ask.
18
+ - Shared truth must be written, not remembered.
@@ -0,0 +1,4 @@
1
+ # Assumptions
2
+
3
+ - List assumptions currently considered true.
4
+ - Update when assumptions change.
@@ -0,0 +1,4 @@
1
+ # Constraints
2
+
3
+ - Non-negotiable rules.
4
+ - Must always be followed.
@@ -0,0 +1,16 @@
1
+ ---
2
+ status: open
3
+ ---
4
+ # DECISION XXXX: <Title>
5
+
6
+ Date:
7
+ Author:
8
+
9
+ Context:
10
+ What led to this decision?
11
+
12
+ Decision:
13
+ What is now considered true?
14
+
15
+ Implications:
16
+ What must follow from this?
@@ -0,0 +1,6 @@
1
+ # Project AI Context
2
+
3
+ This directory contains the canonical AI context
4
+ for this project.
5
+
6
+ All AI agents must read this directory before working.
@@ -0,0 +1,3 @@
1
+ # System Overview
2
+
3
+ [Describe the system architecture and purpose]
@@ -0,0 +1,4 @@
1
+ # Terminology
2
+
3
+ | Term | Definition |
4
+ |------|------------|
@@ -0,0 +1,10 @@
1
+ # Terminology
2
+
3
+ | Term | Definition |
4
+ |------|------------|
5
+ | Protocol | The rules defined in this repository |
6
+ | Decision | A recorded change affecting architecture/semantics/behavior |
7
+ | Context | Project-specific knowledge stored in context/ |
8
+ | Handoff | One AI session ending, another beginning |
9
+ | Constraint | Non-negotiable rule |
10
+ | Assumption | Belief currently considered true, subject to change |
@@ -0,0 +1,12 @@
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.
@@ -0,0 +1,17 @@
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
+
@@ -0,0 +1,22 @@
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
+
@@ -0,0 +1,15 @@
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`
@@ -0,0 +1,4 @@
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="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/>
3
+ </svg>
4
+
@@ -0,0 +1,4 @@
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="m4.5 12.75 6 6 9-13.5"/>
3
+ </svg>
4
+
@@ -0,0 +1,4 @@
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="m19.5 8.25-7.5 7.5-7.5-7.5"/>
3
+ </svg>
4
+
@@ -0,0 +1,5 @@
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
+
@@ -0,0 +1,4 @@
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
+
@@ -0,0 +1,4 @@
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="M6 18 18 6M6 6l12 12"/>
3
+ </svg>
4
+