@miller-tech/uap 1.9.1 → 1.10.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 (195) hide show
  1. package/README.md +285 -642
  2. package/config/chat_template.jinja +76 -0
  3. package/config/lora-finetune.yaml +82 -0
  4. package/config/model-profiles/claude-haiku-3.5.json +62 -0
  5. package/config/model-profiles/claude-opus-4.6.json +63 -0
  6. package/config/model-profiles/claude-sonnet-4.6.json +63 -0
  7. package/config/model-profiles/gemini-2.5-flash.json +62 -0
  8. package/config/model-profiles/gemini-2.5-pro.json +62 -0
  9. package/config/model-profiles/generic.json +54 -0
  10. package/config/model-profiles/glm-5.json +61 -0
  11. package/config/model-profiles/gpt-4.1.json +64 -0
  12. package/config/model-profiles/gpt-4o.json +64 -0
  13. package/config/model-profiles/gpt-o3.json +61 -0
  14. package/config/model-profiles/kimi-k2.5.json +70 -0
  15. package/config/model-profiles/llama.json +86 -0
  16. package/config/model-profiles/qwen35.json +218 -0
  17. package/dist/.tsbuildinfo +1 -1
  18. package/dist/bin/cli.js +78 -9
  19. package/dist/bin/cli.js.map +1 -1
  20. package/dist/bin/llama-server-optimize.js +0 -10
  21. package/dist/bin/llama-server-optimize.js.map +1 -1
  22. package/dist/bin/policy.js +11 -195
  23. package/dist/bin/policy.js.map +1 -1
  24. package/dist/cli/dashboard.d.ts.map +1 -1
  25. package/dist/cli/dashboard.js +10 -12
  26. package/dist/cli/dashboard.js.map +1 -1
  27. package/dist/cli/generate.d.ts +0 -7
  28. package/dist/cli/generate.d.ts.map +1 -1
  29. package/dist/cli/generate.js +10 -22
  30. package/dist/cli/generate.js.map +1 -1
  31. package/dist/cli/memory.d.ts.map +1 -1
  32. package/dist/cli/memory.js +43 -109
  33. package/dist/cli/memory.js.map +1 -1
  34. package/dist/cli/model.d.ts.map +1 -1
  35. package/dist/cli/model.js +8 -25
  36. package/dist/cli/model.js.map +1 -1
  37. package/dist/cli/patterns.d.ts.map +1 -1
  38. package/dist/cli/patterns.js +11 -9
  39. package/dist/cli/patterns.js.map +1 -1
  40. package/dist/cli/policy.d.ts.map +1 -1
  41. package/dist/cli/policy.js +165 -1
  42. package/dist/cli/policy.js.map +1 -1
  43. package/dist/cli/rtk-validation.d.ts +0 -4
  44. package/dist/cli/rtk-validation.d.ts.map +1 -1
  45. package/dist/cli/rtk-validation.js +5 -23
  46. package/dist/cli/rtk-validation.js.map +1 -1
  47. package/dist/cli/schema-diff.d.ts.map +1 -1
  48. package/dist/cli/schema-diff.js +25 -16
  49. package/dist/cli/schema-diff.js.map +1 -1
  50. package/dist/cli/setup-wizard.d.ts.map +1 -1
  51. package/dist/cli/setup-wizard.js +11 -7
  52. package/dist/cli/setup-wizard.js.map +1 -1
  53. package/dist/cli/setup.d.ts.map +1 -1
  54. package/dist/cli/setup.js +3 -4
  55. package/dist/cli/setup.js.map +1 -1
  56. package/dist/cli/visualize.d.ts +0 -13
  57. package/dist/cli/visualize.d.ts.map +1 -1
  58. package/dist/cli/visualize.js +1 -60
  59. package/dist/cli/visualize.js.map +1 -1
  60. package/dist/cli/worktree.d.ts.map +1 -1
  61. package/dist/cli/worktree.js +12 -13
  62. package/dist/cli/worktree.js.map +1 -1
  63. package/dist/coordination/adaptive-patterns.d.ts.map +1 -1
  64. package/dist/coordination/adaptive-patterns.js +7 -3
  65. package/dist/coordination/adaptive-patterns.js.map +1 -1
  66. package/dist/coordination/deploy-batcher.d.ts.map +1 -1
  67. package/dist/coordination/deploy-batcher.js +8 -8
  68. package/dist/coordination/deploy-batcher.js.map +1 -1
  69. package/dist/dashboard/data-service.d.ts.map +1 -1
  70. package/dist/dashboard/data-service.js +12 -13
  71. package/dist/dashboard/data-service.js.map +1 -1
  72. package/dist/dashboard/server.d.ts.map +1 -1
  73. package/dist/dashboard/server.js +23 -8
  74. package/dist/dashboard/server.js.map +1 -1
  75. package/dist/index.d.ts +4 -4
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +3 -3
  78. package/dist/index.js.map +1 -1
  79. package/dist/mcp-router/executor/client.d.ts +0 -6
  80. package/dist/mcp-router/executor/client.d.ts.map +1 -1
  81. package/dist/mcp-router/executor/client.js +1 -27
  82. package/dist/mcp-router/executor/client.js.map +1 -1
  83. package/dist/mcp-router/index.d.ts +1 -1
  84. package/dist/mcp-router/index.d.ts.map +1 -1
  85. package/dist/mcp-router/index.js.map +1 -1
  86. package/dist/mcp-router/output-compressor.js +114 -112
  87. package/dist/mcp-router/output-compressor.js.map +1 -1
  88. package/dist/mcp-router/types.d.ts +0 -5
  89. package/dist/mcp-router/types.d.ts.map +1 -1
  90. package/dist/memory/backends/github.d.ts.map +1 -1
  91. package/dist/memory/backends/github.js +21 -13
  92. package/dist/memory/backends/github.js.map +1 -1
  93. package/dist/memory/context-pruner.d.ts +2 -9
  94. package/dist/memory/context-pruner.d.ts.map +1 -1
  95. package/dist/memory/context-pruner.js +5 -22
  96. package/dist/memory/context-pruner.js.map +1 -1
  97. package/dist/memory/correction-propagator.d.ts.map +1 -1
  98. package/dist/memory/correction-propagator.js +19 -19
  99. package/dist/memory/correction-propagator.js.map +1 -1
  100. package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
  101. package/dist/memory/dynamic-retrieval.js +263 -132
  102. package/dist/memory/dynamic-retrieval.js.map +1 -1
  103. package/dist/memory/embeddings.d.ts.map +1 -1
  104. package/dist/memory/embeddings.js +2 -15
  105. package/dist/memory/embeddings.js.map +1 -1
  106. package/dist/memory/hierarchical-memory.d.ts.map +1 -1
  107. package/dist/memory/hierarchical-memory.js +6 -0
  108. package/dist/memory/hierarchical-memory.js.map +1 -1
  109. package/dist/memory/knowledge-graph.d.ts.map +1 -1
  110. package/dist/memory/knowledge-graph.js +2 -1
  111. package/dist/memory/knowledge-graph.js.map +1 -1
  112. package/dist/memory/memory-consolidator.d.ts +1 -0
  113. package/dist/memory/memory-consolidator.d.ts.map +1 -1
  114. package/dist/memory/memory-consolidator.js +27 -3
  115. package/dist/memory/memory-consolidator.js.map +1 -1
  116. package/dist/memory/predictive-memory.d.ts +9 -1
  117. package/dist/memory/predictive-memory.d.ts.map +1 -1
  118. package/dist/memory/predictive-memory.js +77 -1
  119. package/dist/memory/predictive-memory.js.map +1 -1
  120. package/dist/memory/serverless-qdrant.d.ts +1 -0
  121. package/dist/memory/serverless-qdrant.d.ts.map +1 -1
  122. package/dist/memory/serverless-qdrant.js +3 -9
  123. package/dist/memory/serverless-qdrant.js.map +1 -1
  124. package/dist/memory/short-term/schema.d.ts.map +1 -1
  125. package/dist/memory/short-term/schema.js +44 -6
  126. package/dist/memory/short-term/schema.js.map +1 -1
  127. package/dist/memory/short-term/sqlite.d.ts +4 -3
  128. package/dist/memory/short-term/sqlite.d.ts.map +1 -1
  129. package/dist/memory/short-term/sqlite.js +3 -12
  130. package/dist/memory/short-term/sqlite.js.map +1 -1
  131. package/dist/memory/speculative-cache.js +2 -2
  132. package/dist/memory/speculative-cache.js.map +1 -1
  133. package/dist/models/executor.d.ts +21 -0
  134. package/dist/models/executor.d.ts.map +1 -1
  135. package/dist/models/executor.js +116 -4
  136. package/dist/models/executor.js.map +1 -1
  137. package/dist/models/planner.d.ts +1 -0
  138. package/dist/models/planner.d.ts.map +1 -1
  139. package/dist/models/planner.js +13 -1
  140. package/dist/models/planner.js.map +1 -1
  141. package/dist/policies/enforced-tool-router.d.ts +3 -1
  142. package/dist/policies/enforced-tool-router.d.ts.map +1 -1
  143. package/dist/policies/enforced-tool-router.js.map +1 -1
  144. package/dist/tasks/service.d.ts +1 -0
  145. package/dist/tasks/service.d.ts.map +1 -1
  146. package/dist/tasks/service.js +10 -6
  147. package/dist/tasks/service.js.map +1 -1
  148. package/dist/telemetry/session-telemetry.d.ts.map +1 -1
  149. package/dist/telemetry/session-telemetry.js +14 -11
  150. package/dist/telemetry/session-telemetry.js.map +1 -1
  151. package/dist/types/config.d.ts +426 -359
  152. package/dist/types/config.d.ts.map +1 -1
  153. package/dist/types/config.js +12 -67
  154. package/dist/types/config.js.map +1 -1
  155. package/dist/utils/config-loader.d.ts +34 -0
  156. package/dist/utils/config-loader.d.ts.map +1 -0
  157. package/dist/utils/config-loader.js +93 -0
  158. package/dist/utils/config-loader.js.map +1 -0
  159. package/dist/utils/lazy-imports.d.ts +18 -0
  160. package/dist/utils/lazy-imports.d.ts.map +1 -0
  161. package/dist/utils/lazy-imports.js +39 -0
  162. package/dist/utils/lazy-imports.js.map +1 -0
  163. package/dist/utils/stopwords.d.ts +12 -0
  164. package/dist/utils/stopwords.d.ts.map +1 -0
  165. package/dist/utils/stopwords.js +196 -0
  166. package/dist/utils/stopwords.js.map +1 -0
  167. package/dist/utils/string-similarity.d.ts +10 -3
  168. package/dist/utils/string-similarity.d.ts.map +1 -1
  169. package/dist/utils/string-similarity.js +49 -25
  170. package/dist/utils/string-similarity.js.map +1 -1
  171. package/docs/INDEX.md +35 -34
  172. package/package.json +13 -14
  173. package/scripts/maintenance/publish-npm.sh +82 -0
  174. package/scripts/maintenance/publish.sh +29 -0
  175. package/scripts/maintenance/update-droids.py +93 -0
  176. package/scripts/maintenance/update-skills.py +148 -0
  177. package/scripts/maintenance/update-uap-compliance.sh +45 -0
  178. package/scripts/maintenance/validate-skills.py +83 -0
  179. package/scripts/maintenance/verify-compliance.sh +117 -0
  180. package/scripts/setup/install-cloakbrowser.ts +14 -0
  181. package/scripts/setup/install-desktop.sh +105 -0
  182. package/scripts/setup/install-rtk.sh +184 -0
  183. package/scripts/setup/install-web.sh +73 -0
  184. package/scripts/setup/setup.sh +375 -0
  185. package/scripts/validate-build.sh +62 -0
  186. package/scripts/version-bump.sh +130 -0
  187. package/tools/agents/scripts/migrate_memory_to_qdrant.py +1 -1
  188. /package/docs/{BENCHMARK_GAPS_AND_PLAN.md → archive/BENCHMARK_GAPS_AND_PLAN.md} +0 -0
  189. /package/docs/{MODEL_ROUTING_IMPLEMENTATION_SUMMARY.md → archive/MODEL_ROUTING_IMPLEMENTATION_SUMMARY.md} +0 -0
  190. /package/docs/{MODEL_ROUTING_OPTIMIZATION_PLAN.md → archive/MODEL_ROUTING_OPTIMIZATION_PLAN.md} +0 -0
  191. /package/docs/{PARALLELISM_GAPS_AND_OPTIONS.md → archive/PARALLELISM_GAPS_AND_OPTIONS.md} +0 -0
  192. /package/docs/{POLICY_GATE_IMPLEMENTATION.md → archive/POLICY_GATE_IMPLEMENTATION.md} +0 -0
  193. /package/docs/{UAP_OPTIMIZATION_PLAN.md → archive/UAP_OPTIMIZATION_PLAN.md} +0 -0
  194. /package/docs/{opencode-integration-guide.md → archive/opencode-integration-guide.md} +0 -0
  195. /package/docs/{opencode-integration-quickref.md → archive/opencode-integration-quickref.md} +0 -0
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+ # Update all UAP components for v2.3.0 compatibility
3
+ # This script ensures CLAUDE.md, skills, and droids are aligned
4
+
5
+ set -e
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
9
+
10
+ echo "=== UAP Compliance Update Script ==="
11
+ echo "Target: CLAUDE.md v2.3.0+"
12
+ echo ""
13
+
14
+ # Step 1: Verify CLAUDE.md version
15
+ echo "Step 1/4: Checking CLAUDE.md version..."
16
+ if grep -q "CLAUDE.md v2\.[2-9]" "$PROJECT_ROOT/CLAUDE.md" || \
17
+ grep -q "CLAUDE.md v3\." "$PROJECT_ROOT/CLAUDE.md"; then
18
+ echo " ✓ CLAUDE.md version compatible"
19
+ else
20
+ echo " ✗ CLAUDE.md needs update to v2.3.0+"
21
+ exit 1
22
+ fi
23
+
24
+ # Step 2: Update skills
25
+ echo ""
26
+ echo "Step 2/4: Updating skills..."
27
+ python3 "$SCRIPT_DIR/update-skills.py" || {
28
+ echo " ⚠ Skills update failed, continuing anyway"
29
+ }
30
+
31
+ # Step 3: Update droids
32
+ echo ""
33
+ echo "Step 3/4: Updating droids..."
34
+ python3 "$SCRIPT_DIR/update-droids.py" || {
35
+ echo " ⚠ Droids update failed, continuing anyway"
36
+ }
37
+
38
+ # Step 4: Verify compliance
39
+ echo ""
40
+ echo "Step 4/4: Verifying UAP compliance..."
41
+ bash "$SCRIPT_DIR/verify-compliance.sh"
42
+
43
+ echo ""
44
+ echo "=== Update Complete ==="
45
+ echo "All components updated for CLAUDE.md v2.3.0+"
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """Validate all skills include required v2.3.0 markers."""
3
+
4
+ import os
5
+ import sys
6
+ from pathlib import Path
7
+
8
+ SKILLS_DIR = os.path.join(
9
+ os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
10
+ ".factory",
11
+ "skills",
12
+ )
13
+
14
+ required_markers = [
15
+ "compatibility: CLAUDE.md v2.3.0+",
16
+ "@hooks-session-start.md",
17
+ "DECISION LOOP",
18
+ "MANDATORY",
19
+ ]
20
+
21
+ print("=== Validating Skills for UAM v2.3.0 Compliance ===\n")
22
+
23
+ errors = []
24
+ warnings = []
25
+
26
+ for skill_dir in os.listdir(SKILLS_DIR):
27
+ skill_path = os.path.join(SKILLS_DIR, skill_dir)
28
+
29
+ if not os.path.isdir(skill_path):
30
+ continue
31
+
32
+ skill_file = os.path.join(skill_path, "SKILL.md")
33
+
34
+ if not os.path.exists(skill_file):
35
+ errors.append(f"{skill_dir}/SKILL.md: File not found")
36
+ continue
37
+
38
+ with open(skill_file, "r", encoding="utf-8") as f:
39
+ content = f.read()
40
+
41
+ skill_name = skill_dir
42
+
43
+ # Check required markers
44
+ for marker in required_markers:
45
+ if marker not in content:
46
+ errors.append(f"{skill_name}: Missing '{marker}'")
47
+
48
+ # Warn about optional but recommended markers
49
+ optional_markers = [
50
+ "Completion Gates Checklist",
51
+ "Verifier-First",
52
+ "Memory Integration",
53
+ ]
54
+
55
+ for marker in optional_markers:
56
+ if marker not in content:
57
+ warnings.append(f"{skill_name}: Missing optional '{marker}' (recommended)")
58
+
59
+ # Report results
60
+ if errors:
61
+ print("❌ ERRORS - Skills missing required markers:")
62
+ for error in errors:
63
+ print(f" ✗ {error}")
64
+ print()
65
+
66
+ if warnings:
67
+ print("⚠️ WARNINGS - Skills missing optional markers:")
68
+ for warning in warnings[:5]: # Show first 5 warnings
69
+ print(f" ⚠ {warning}")
70
+ if len(warnings) > 5:
71
+ print(f" ... and {len(warnings) - 5} more")
72
+ print()
73
+
74
+ if not errors and not warnings:
75
+ print("✓ All skills are compliant with UAM v2.3.0!")
76
+ sys.exit(0)
77
+ elif not errors:
78
+ print("✓ Skills pass all required checks (warnings shown above)")
79
+ sys.exit(0)
80
+ else:
81
+ print("\n❌ Validation FAILED")
82
+ print("Run 'npm run update-skills' to fix issues")
83
+ sys.exit(1)
@@ -0,0 +1,117 @@
1
+ #!/bin/bash
2
+ # Verify UAP compliance for CLAUDE.md v2.3.0+
3
+
4
+ echo "=== UAP Compliance Verification ==="
5
+ echo ""
6
+
7
+ score=0
8
+ total=12
9
+
10
+ # 1. CLAUDE.md version check
11
+ if grep -q "CLAUDE.md v2\.[2-9]\|CLAUDE.md v3\." CLAUDE.md; then
12
+ ((score++))
13
+ echo "✓ CLAUDE.md version (v2.x+/v3.x)"
14
+ else
15
+ echo "✗ CLAUDE.md version not found"
16
+ fi
17
+
18
+ # 2. SESSION START block
19
+ if grep -q "## SESSION START" CLAUDE.md && grep -q "uap task ready" CLAUDE.md; then
20
+ ((score++))
21
+ echo "✓ SESSION START block with uap task ready"
22
+ else
23
+ echo "✗ SESSION START block MISSING"
24
+ fi
25
+
26
+ # 3. DECISION LOOP with skills reference
27
+ if grep -q "@Skill:name.md" CLAUDE.md; then
28
+ ((score++))
29
+ echo "✓ DECISION LOOP with @Skill:name.md reference"
30
+ else
31
+ echo "✗ DECISION LOOP skills reference MISSING"
32
+ fi
33
+
34
+ # 4. MANDATORY worktree enforcement
35
+ if grep -q "WORKTREE WORKFLOW — MANDATORY\|## WORKTREE WORKFLOW.*MANDATORY" CLAUDE.md; then
36
+ ((score++))
37
+ echo "✓ MANDATORY worktree enforcement present"
38
+ else
39
+ echo "✗ MANDATORY worktree enforcement MISSING"
40
+ fi
41
+
42
+ # 5. PARALLEL REVIEW PROTOCOL
43
+ if grep -q "## PARALLEL REVIEW PROTOCOL" CLAUDE.md; then
44
+ ((score++))
45
+ echo "✓ PARALLEL REVIEW PROTOCOL present"
46
+ else
47
+ echo "✗ PARALLEL REVIEW PROTOCOL MISSING"
48
+ fi
49
+
50
+ # 6. Schema diff gate ordering
51
+ if grep -q "BLOCKING PREREQUISITES.*Schema Diff Gate\|1\. \*\*Schema Diff Gate" CLAUDE.md; then
52
+ ((score++))
53
+ echo "✓ Schema diff gate in BLOCKING PREREQUISITES"
54
+ else
55
+ echo "✗ Schema diff gate NOT in blocking prerequisites"
56
+ fi
57
+
58
+ # 7. VERIFIER-FIRST section
59
+ if grep -q "## VERIFIER-FIRST" CLAUDE.md; then
60
+ ((score++))
61
+ echo "✓ VERIFIER-FIRST section present"
62
+ else
63
+ echo "✗ VERIFIER-FIRST MISSING"
64
+ fi
65
+
66
+ # 8. COMPLETION GATES - MANDATORY
67
+ if grep -q "COMPLETION GATES.*-.*MANDATORY\|## COMPLETION GATES - MANDATORY" CLAUDE.md; then
68
+ ((score++))
69
+ echo "✓ COMPLETION GATES - MANDATORY present"
70
+ else
71
+ echo "✗ COMPLETION GATES - MANDATORY MISSING"
72
+ fi
73
+
74
+ # 9. Pattern Router requirement
75
+ if grep -q "Pattern.*Router\|pattern router" CLAUDE.md; then
76
+ ((score++))
77
+ echo "✓ Pattern Router documented"
78
+ else
79
+ echo "✗ Pattern Router MISSING"
80
+ fi
81
+
82
+ # 10. RTK includes
83
+ if grep -q "@hooks-session-start.md\|@PreCompact.md" CLAUDE.md; then
84
+ ((score++))
85
+ echo "✓ RTK includes (@hooks-session-start, @PreCompact)"
86
+ else
87
+ echo "✗ RTK includes MISSING"
88
+ fi
89
+
90
+ # 11. Verifier loop enforcement (min 3 runs)
91
+ if grep -q "MANDATORY.*minimum 3 times\|MANDATORY.*3 times" CLAUDE.md; then
92
+ ((score++))
93
+ echo "✓ Verifier loop enforced (min 3 runs)"
94
+ else
95
+ echo "✗ Verifier loop enforcement MISSING"
96
+ fi
97
+
98
+ # 12. Skills directory structure
99
+ if [ -d ".factory/skills" ] && [ "$(ls -A .factory/skills 2>/dev/null)" ]; then
100
+ ((score++))
101
+ echo "✓ Skills directory populated"
102
+ else
103
+ echo "✗ Skills directory MISSING or empty"
104
+ fi
105
+
106
+ echo ""
107
+ echo "=== UAP COMPLIANCE SCORE: $score/$total ($(( score * 100 / total ))%) ==="
108
+ echo ""
109
+
110
+ if [ "$score" -eq "$total" ]; then
111
+ echo "✓ All compliance checks passed!"
112
+ exit 0
113
+ else
114
+ echo "✗ Compliance check failed! Score: $score/$total"
115
+ echo "Run 'npm run update-uap' to fix issues"
116
+ exit 1
117
+ fi
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { execSync } from 'node:child_process';
3
+
4
+ try {
5
+ console.log('Installing CloakBrowser dependencies...');
6
+ execSync('npm install cloakbrowser playwright-core', { stdio: 'inherit' });
7
+ console.log('\nInstalling Playwright browsers...');
8
+ execSync('npx playwright install chromium', { stdio: 'inherit' });
9
+ console.log('\n✅ CloakBrowser ready!');
10
+ console.log('\nTo use: import { createWebBrowser } from "universal-agent-protocol/browser";');
11
+ } catch (error) {
12
+ console.error('❌ Installation failed:', error.message);
13
+ process.exit(1);
14
+ }
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Colors
5
+ GREEN='\033[0;32m'
6
+ YELLOW='\033[1;33m'
7
+ RED='\033[0;31m'
8
+ NC='\033[0m' # No Color
9
+
10
+ REPO_URL="https://github.com/DammianMiller/universal-agent-protocol"
11
+
12
+ echo -e "${GREEN}Universal Agent Memory - Desktop Installation${NC}"
13
+ echo "============================================"
14
+ echo ""
15
+
16
+ # Check for Node.js
17
+ if ! command -v node &> /dev/null; then
18
+ echo -e "${RED}Error: Node.js is not installed${NC}"
19
+ echo "Please install Node.js 18+ from https://nodejs.org/"
20
+ exit 1
21
+ fi
22
+
23
+ NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
24
+ if [ "$NODE_VERSION" -lt 18 ]; then
25
+ echo -e "${RED}Error: Node.js 18+ required (you have $(node -v))${NC}"
26
+ exit 1
27
+ fi
28
+
29
+ echo -e "${GREEN}✓${NC} Node.js $(node -v) detected"
30
+
31
+ # Check for npm
32
+ if ! command -v npm &> /dev/null; then
33
+ echo -e "${RED}Error: npm is not installed${NC}"
34
+ exit 1
35
+ fi
36
+
37
+ echo -e "${GREEN}✓${NC} npm $(npm -v) detected"
38
+
39
+ # Check for Docker (optional)
40
+ if command -v docker &> /dev/null; then
41
+ echo -e "${GREEN}✓${NC} Docker detected - local Qdrant available"
42
+ DOCKER_AVAILABLE=true
43
+ else
44
+ echo -e "${YELLOW}⚠${NC} Docker not found - will use cloud backends only"
45
+ DOCKER_AVAILABLE=false
46
+ fi
47
+
48
+ # Install the CLI globally
49
+ echo ""
50
+ echo "Installing universal-agent-protocol..."
51
+
52
+ # Try npm install first, fall back to git clone if package not published yet
53
+ if npm install -g universal-agent-protocol 2>/dev/null; then
54
+ echo -e "${GREEN}✓${NC} Installed from npm registry"
55
+ else
56
+ echo -e "${YELLOW}Package not yet on npm, installing from GitHub...${NC}"
57
+
58
+ # Install to user's local directory
59
+ INSTALL_DIR="${HOME}/.universal-agent-protocol"
60
+
61
+ # Remove old installation if exists
62
+ if [ -d "$INSTALL_DIR" ]; then
63
+ echo "Removing previous installation..."
64
+ rm -rf "$INSTALL_DIR"
65
+ fi
66
+
67
+ # Clone and install
68
+ git clone --depth 1 "$REPO_URL.git" "$INSTALL_DIR"
69
+ cd "$INSTALL_DIR"
70
+ npm install --production=false
71
+ npm run build
72
+ npm link
73
+
74
+ echo -e "${GREEN}✓${NC} Installed from GitHub to $INSTALL_DIR"
75
+ fi
76
+
77
+ echo ""
78
+ echo -e "${GREEN}Installation complete!${NC}"
79
+ echo ""
80
+ echo "Next steps:"
81
+ echo " 1. Initialize UAP in your project:"
82
+ echo " $ cd /path/to/your/project"
83
+ echo " $ uap init"
84
+ echo ""
85
+ echo " 2. Review the generated CLAUDE.md"
86
+ echo ""
87
+ echo " 3. Start working - your AI assistant will follow the workflows!"
88
+ echo ""
89
+
90
+ if [ "$DOCKER_AVAILABLE" = true ]; then
91
+ echo " 2. Start local memory services (optional):"
92
+ echo " $ uap memory start"
93
+ echo ""
94
+ echo " Or use cloud backends:"
95
+ else
96
+ echo " 2. Configure cloud memory backends:"
97
+ fi
98
+
99
+ echo " - GitHub: export GITHUB_TOKEN=your_token"
100
+ echo " - Qdrant Cloud: export QDRANT_API_KEY=your_key && export QDRANT_URL=your_url"
101
+ echo ""
102
+ echo " 3. Generate CLAUDE.md for your project:"
103
+ echo " $ uap generate"
104
+ echo ""
105
+ echo "Documentation: ${REPO_URL}#readme"
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env bash
2
+ # RTK (Rust Token Killer) Installation Script for UAP
3
+ # Auto-detects OS and installs RTK via appropriate method
4
+
5
+ set -euo pipefail
6
+
7
+ echo "🔧 Installing RTK (Rust Token Killer)..."
8
+ echo " Reduces LLM token consumption by 60-90% on CLI commands"
9
+ echo ""
10
+
11
+ # Detect OS and architecture
12
+ detect_os() {
13
+ if [[ "$(uname -s)" == "Darwin" ]]; then
14
+ echo "macOS"
15
+ elif [[ "$(uname -s)" == "Linux" ]]; then
16
+ echo "Linux"
17
+ elif [[ "$(uname -s)" =~ MINGW.* || "$(uname -s)" =~ MSYS* ]]; then
18
+ echo "Windows"
19
+ else
20
+ echo "Unknown"
21
+ fi
22
+ }
23
+
24
+ detect_arch() {
25
+ local arch=$(uname -m)
26
+ case $arch in
27
+ x86_64) echo "x86_64" ;;
28
+ arm64|aarch64) echo "arm64" ;;
29
+ *) echo "$arch" ;;
30
+ esac
31
+ }
32
+
33
+ OS=$(detect_os)
34
+ ARCH=$(detect_arch)
35
+
36
+ echo "Detected: $OS ($ARCH)"
37
+ echo ""
38
+
39
+ # Check if Homebrew is available (macOS/Linux)
40
+ check_brew() {
41
+ command -v brew &> /dev/null && echo "yes" || echo "no"
42
+ }
43
+
44
+ # Check if cargo is installed
45
+ check_cargo() {
46
+ command -v cargo &> /dev/null && echo "yes" || echo "no"
47
+ }
48
+
49
+ # Check if RTK is already installed
50
+ check_rtk_installed() {
51
+ command -v rtk &> /dev/null && echo "yes" || echo "no"
52
+ }
53
+
54
+ RTK_INSTALLED=$(check_rtk_installed)
55
+
56
+ if [[ "$RTK_INSTALLED" == "yes" ]]; then
57
+ CURRENT_VERSION=$(rtk --version 2>&1 | head -1)
58
+ echo "ℹ RTK is already installed: $CURRENT_VERSION"
59
+ echo ""
60
+ read -p "Do you want to upgrade to the latest version? [y/N] " -n 1 -r
61
+ echo ""
62
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
63
+ echo "Skipping installation."
64
+ exit 0
65
+ fi
66
+ fi
67
+
68
+ # Installation methods (in order of preference)
69
+ install_methods=(
70
+ "homebrew"
71
+ "cargo"
72
+ "curl_install"
73
+ )
74
+
75
+ INSTALL_SUCCESS=false
76
+
77
+ for method in "${install_methods[@]}"; do
78
+ echo "📦 Trying installation method: $method"
79
+
80
+ case $method in
81
+ homebrew)
82
+ if [[ "$OS" == "macOS" ]] || (check_brew == "yes"); then
83
+ echo " Installing via Homebrew..."
84
+ if brew install rtk &> /dev/null; then
85
+ INSTALL_SUCCESS=true
86
+ break
87
+ fi
88
+ fi
89
+ ;;
90
+
91
+ cargo)
92
+ if check_cargo == "yes"; then
93
+ echo " Installing via Cargo..."
94
+ if cargo install --git https://github.com/rtk-ai/rtk --quiet 2>&1; then
95
+ INSTALL_SUCCESS=true
96
+ break
97
+ fi
98
+ fi
99
+ ;;
100
+
101
+ curl_install)
102
+ if [[ "$OS" == "macOS" ]] || [[ "$OS" == "Linux" ]]; then
103
+ echo " Installing via curl..."
104
+ TEMP_DIR=$(mktemp -d)
105
+ cd "$TEMP_DIR"
106
+
107
+ # Download appropriate binary based on OS/arch
108
+ if [[ "$ARCH" == "arm64" ]]; then
109
+ BINARY="rtk-aarch64-apple-darwin.tar.gz"
110
+ else
111
+ BINARY="rtk-x86_64-apple-darwin.tar.gz"
112
+ fi
113
+
114
+ if [[ "$OS" == "Linux" ]]; then
115
+ if [[ "$ARCH" == "arm64" ]]; then
116
+ BINARY="rtk-aarch64-unknown-linux-gnu.tar.gz"
117
+ else
118
+ BINARY="rtk-x86_64-unknown-linux-musl.tar.gz"
119
+ fi
120
+ fi
121
+
122
+ echo " Downloading: $BINARY"
123
+
124
+ if curl -fsSL "https://github.com/rtk-ai/rtk/releases/latest/download/$BINARY" -o rtk.tar.gz 2>&1; then
125
+ tar -xzf rtk.tar.gz
126
+ chmod +x rtk
127
+
128
+ # Move to local bin or PATH
129
+ if [[ -d "$HOME/.local/bin" ]] || echo "$PATH" | grep -q "$HOME/.local/bin"; then
130
+ mkdir -p "$HOME/.local/bin"
131
+ mv rtk "$HOME/.local/bin/"
132
+ echo " Installed to: $HOME/.local/bin/rtk"
133
+ else
134
+ sudo mkdir -p /usr/local/bin
135
+ sudo mv rtk /usr/local/bin/
136
+ echo " Installed to: /usr/local/bin/rtk"
137
+ fi
138
+
139
+ INSTALL_SUCCESS=true
140
+ cd ..
141
+ rm -rf "$TEMP_DIR"
142
+ break
143
+ fi
144
+ fi
145
+ ;;
146
+ esac
147
+
148
+ echo " ✗ Failed: $method"
149
+ done
150
+
151
+ # Verify installation
152
+ if [[ "$INSTALL_SUCCESS" == "true" ]]; then
153
+ if command -v rtk &> /dev/null; then
154
+ VERSION=$(rtk --version 2>&1 | head -1)
155
+ echo ""
156
+ echo "✅ RTK installed successfully!"
157
+ echo " Version: $VERSION"
158
+ echo ""
159
+ echo "📚 Next steps:"
160
+ echo " 1. Initialize hook for Claude Code:"
161
+ echo " rtk init --global"
162
+ echo ""
163
+ echo " 2. Verify installation:"
164
+ echo " rtk gain"
165
+ echo ""
166
+ echo " 3. View token savings:"
167
+ echo " rtk gain --graph"
168
+ echo ""
169
+ else
170
+ echo "❌ Installation completed but RTK binary not found in PATH"
171
+ echo " Please ensure $HOME/.local/bin is in your PATH:"
172
+ echo ' echo '\''export PATH="$HOME/.local/bin:$PATH"'\'' >> ~/.bashrc'
173
+ exit 1
174
+ fi
175
+ else
176
+ echo ""
177
+ echo "❌ All installation methods failed"
178
+ echo ""
179
+ echo "Manual installation options:"
180
+ echo " 1. Homebrew (macOS/Linux): brew install rtk"
181
+ echo " 2. Cargo: cargo install --git https://github.com/rtk-ai/rtk"
182
+ echo " 3. Pre-built binaries: https://github.com/rtk-ai/rtk/releases"
183
+ exit 1
184
+ fi
@@ -0,0 +1,73 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ REPO_URL="https://github.com/DammianMiller/universal-agent-protocol"
5
+
6
+ echo "🚀 Universal Agent Memory - Web Platform Setup"
7
+ echo ""
8
+
9
+ # Check for required tools
10
+ if ! command -v node &> /dev/null; then
11
+ echo "❌ Node.js is required. Install from https://nodejs.org"
12
+ exit 1
13
+ fi
14
+
15
+ if ! command -v npm &> /dev/null; then
16
+ echo "❌ npm is required. Install from https://nodejs.org"
17
+ exit 1
18
+ fi
19
+
20
+ echo "✅ Node.js $(node -v) detected"
21
+ echo "✅ npm $(npm -v) detected"
22
+
23
+ # Install CLI globally
24
+ echo ""
25
+ echo "📦 Installing universal-agent-protocol CLI..."
26
+
27
+ # Try npm install first, fall back to git clone if package not published yet
28
+ if npm install -g universal-agent-protocol 2>/dev/null; then
29
+ echo "✅ Installed from npm registry"
30
+ else
31
+ echo "⚠️ Package not yet on npm, installing from GitHub..."
32
+
33
+ # Install to user's local directory
34
+ INSTALL_DIR="${HOME}/.universal-agent-protocol"
35
+
36
+ # Remove old installation if exists
37
+ if [ -d "$INSTALL_DIR" ]; then
38
+ echo "Removing previous installation..."
39
+ rm -rf "$INSTALL_DIR"
40
+ fi
41
+
42
+ # Clone and install
43
+ git clone --depth 1 "$REPO_URL.git" "$INSTALL_DIR"
44
+ cd "$INSTALL_DIR"
45
+ npm install --production=false
46
+ npm run build
47
+ npm link
48
+
49
+ echo "✅ Installed from GitHub to $INSTALL_DIR"
50
+ fi
51
+
52
+ # Initialize in current directory
53
+ echo ""
54
+ echo "⚙️ Initializing project..."
55
+ uap init --web --interactive
56
+
57
+ echo ""
58
+ echo "✅ Setup complete!"
59
+ echo ""
60
+ echo "Next steps:"
61
+ echo " 1. Initialize UAP in your project:"
62
+ echo " uap init"
63
+ echo ""
64
+ echo " 2. Review the generated CLAUDE.md"
65
+ echo ""
66
+ echo " 3. Start working - your AI assistant will follow the workflows!"
67
+ echo ""
68
+ echo "Optional: Set up cloud memory backends"
69
+ echo " export GITHUB_TOKEN=your_token"
70
+ echo " export QDRANT_API_KEY=your_key"
71
+ echo " export QDRANT_URL=your_url"
72
+ echo ""
73
+ echo "Documentation: ${REPO_URL}#readme"