@plures/runebook 0.4.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 (148) hide show
  1. package/ANALYSIS_LADDER.md +231 -0
  2. package/CHANGELOG.md +124 -0
  3. package/INTEGRATIONS.md +242 -0
  4. package/LICENSE +21 -0
  5. package/MEMORY.md +253 -0
  6. package/NIXOS.md +357 -0
  7. package/QUICKSTART.md +157 -0
  8. package/README.md +295 -0
  9. package/RELEASE.md +190 -0
  10. package/ValidationChecklist.md +598 -0
  11. package/docs/demo.md +338 -0
  12. package/docs/llm-integration.md +300 -0
  13. package/docs/parallel-execution-plan.md +160 -0
  14. package/flake.nix +228 -0
  15. package/integrations/README.md +242 -0
  16. package/integrations/demo-steps.sh +64 -0
  17. package/integrations/nvim-runebook.lua +140 -0
  18. package/integrations/tmux-status.sh +51 -0
  19. package/integrations/vim-runebook.vim +77 -0
  20. package/integrations/wezterm-status-simple.lua +48 -0
  21. package/integrations/wezterm-status.lua +76 -0
  22. package/nixos-module.nix +156 -0
  23. package/package.json +76 -0
  24. package/packages/design-dojo/index.js +4 -0
  25. package/packages/design-dojo/package.json +20 -0
  26. package/packages/design-dojo/tokens.css +69 -0
  27. package/playwright.config.ts +16 -0
  28. package/scripts/check-versions.cjs +62 -0
  29. package/scripts/demo.sh +220 -0
  30. package/shell.nix +31 -0
  31. package/src/app.html +13 -0
  32. package/src/cli/index.ts +1050 -0
  33. package/src/lib/agent/analysis-pipeline.ts +347 -0
  34. package/src/lib/agent/analysis-service.ts +171 -0
  35. package/src/lib/agent/analysis.ts +159 -0
  36. package/src/lib/agent/analyzers/heuristic.ts +289 -0
  37. package/src/lib/agent/analyzers/index.ts +7 -0
  38. package/src/lib/agent/analyzers/llm.ts +204 -0
  39. package/src/lib/agent/analyzers/local-search.ts +215 -0
  40. package/src/lib/agent/capture.ts +123 -0
  41. package/src/lib/agent/index.ts +244 -0
  42. package/src/lib/agent/integration.ts +81 -0
  43. package/src/lib/agent/llm/providers/base.ts +99 -0
  44. package/src/lib/agent/llm/providers/index.ts +60 -0
  45. package/src/lib/agent/llm/providers/mock.ts +67 -0
  46. package/src/lib/agent/llm/providers/ollama.ts +151 -0
  47. package/src/lib/agent/llm/providers/openai.ts +153 -0
  48. package/src/lib/agent/llm/sanitizer.ts +170 -0
  49. package/src/lib/agent/llm/types.ts +118 -0
  50. package/src/lib/agent/memory.ts +363 -0
  51. package/src/lib/agent/node-status.ts +56 -0
  52. package/src/lib/agent/node-suggestions.ts +64 -0
  53. package/src/lib/agent/status.ts +80 -0
  54. package/src/lib/agent/suggestions.ts +169 -0
  55. package/src/lib/components/Canvas.svelte +124 -0
  56. package/src/lib/components/ConnectionLine.svelte +46 -0
  57. package/src/lib/components/DisplayNode.svelte +167 -0
  58. package/src/lib/components/InputNode.svelte +158 -0
  59. package/src/lib/components/TerminalNode.svelte +237 -0
  60. package/src/lib/components/Toolbar.svelte +359 -0
  61. package/src/lib/components/TransformNode.svelte +327 -0
  62. package/src/lib/core/index.ts +31 -0
  63. package/src/lib/core/observer.ts +278 -0
  64. package/src/lib/core/redaction.ts +158 -0
  65. package/src/lib/core/shell-adapters/base.ts +325 -0
  66. package/src/lib/core/shell-adapters/bash.ts +110 -0
  67. package/src/lib/core/shell-adapters/index.ts +62 -0
  68. package/src/lib/core/shell-adapters/zsh.ts +105 -0
  69. package/src/lib/core/storage.ts +360 -0
  70. package/src/lib/core/types.ts +176 -0
  71. package/src/lib/design-dojo/Box.svelte +47 -0
  72. package/src/lib/design-dojo/Button.svelte +75 -0
  73. package/src/lib/design-dojo/Input.svelte +65 -0
  74. package/src/lib/design-dojo/List.svelte +38 -0
  75. package/src/lib/design-dojo/Select.svelte +48 -0
  76. package/src/lib/design-dojo/SplitPane.svelte +43 -0
  77. package/src/lib/design-dojo/StatusBar.svelte +61 -0
  78. package/src/lib/design-dojo/Table.svelte +47 -0
  79. package/src/lib/design-dojo/Text.svelte +36 -0
  80. package/src/lib/design-dojo/Toggle.svelte +48 -0
  81. package/src/lib/design-dojo/index.ts +10 -0
  82. package/src/lib/stores/canvas-praxis.ts +268 -0
  83. package/src/lib/stores/canvas.ts +58 -0
  84. package/src/lib/types/agent.ts +78 -0
  85. package/src/lib/types/canvas.ts +71 -0
  86. package/src/lib/utils/storage.ts +326 -0
  87. package/src/lib/utils/yaml-loader.ts +52 -0
  88. package/src/routes/+layout.svelte +5 -0
  89. package/src/routes/+layout.ts +5 -0
  90. package/src/routes/+page.svelte +32 -0
  91. package/src-tauri/Cargo.lock +5735 -0
  92. package/src-tauri/Cargo.toml +38 -0
  93. package/src-tauri/build.rs +3 -0
  94. package/src-tauri/capabilities/default.json +10 -0
  95. package/src-tauri/icons/128x128.png +0 -0
  96. package/src-tauri/icons/128x128@2x.png +0 -0
  97. package/src-tauri/icons/32x32.png +0 -0
  98. package/src-tauri/icons/Square107x107Logo.png +0 -0
  99. package/src-tauri/icons/Square142x142Logo.png +0 -0
  100. package/src-tauri/icons/Square150x150Logo.png +0 -0
  101. package/src-tauri/icons/Square284x284Logo.png +0 -0
  102. package/src-tauri/icons/Square30x30Logo.png +0 -0
  103. package/src-tauri/icons/Square310x310Logo.png +0 -0
  104. package/src-tauri/icons/Square44x44Logo.png +0 -0
  105. package/src-tauri/icons/Square71x71Logo.png +0 -0
  106. package/src-tauri/icons/Square89x89Logo.png +0 -0
  107. package/src-tauri/icons/StoreLogo.png +0 -0
  108. package/src-tauri/icons/icon.icns +0 -0
  109. package/src-tauri/icons/icon.ico +0 -0
  110. package/src-tauri/icons/icon.png +0 -0
  111. package/src-tauri/src/agents/agent1.rs +66 -0
  112. package/src-tauri/src/agents/agent2.rs +80 -0
  113. package/src-tauri/src/agents/agent3.rs +73 -0
  114. package/src-tauri/src/agents/agent4.rs +66 -0
  115. package/src-tauri/src/agents/agent5.rs +68 -0
  116. package/src-tauri/src/agents/agent6.rs +75 -0
  117. package/src-tauri/src/agents/base.rs +52 -0
  118. package/src-tauri/src/agents/mod.rs +17 -0
  119. package/src-tauri/src/core/coordination.rs +117 -0
  120. package/src-tauri/src/core/mod.rs +12 -0
  121. package/src-tauri/src/core/ownership.rs +61 -0
  122. package/src-tauri/src/core/types.rs +132 -0
  123. package/src-tauri/src/execution/mod.rs +5 -0
  124. package/src-tauri/src/execution/runner.rs +143 -0
  125. package/src-tauri/src/lib.rs +161 -0
  126. package/src-tauri/src/main.rs +6 -0
  127. package/src-tauri/src/memory/api.rs +422 -0
  128. package/src-tauri/src/memory/client.rs +156 -0
  129. package/src-tauri/src/memory/encryption.rs +79 -0
  130. package/src-tauri/src/memory/migration.rs +110 -0
  131. package/src-tauri/src/memory/mod.rs +28 -0
  132. package/src-tauri/src/memory/schema.rs +275 -0
  133. package/src-tauri/src/memory/tests.rs +192 -0
  134. package/src-tauri/src/orchestrator/coordinator.rs +232 -0
  135. package/src-tauri/src/orchestrator/mod.rs +13 -0
  136. package/src-tauri/src/orchestrator/planner.rs +304 -0
  137. package/src-tauri/tauri.conf.json +35 -0
  138. package/static/examples/date-time-example.yaml +147 -0
  139. package/static/examples/hello-world.yaml +74 -0
  140. package/static/examples/transform-example.yaml +157 -0
  141. package/static/favicon.png +0 -0
  142. package/static/svelte.svg +1 -0
  143. package/static/tauri.svg +6 -0
  144. package/static/vite.svg +1 -0
  145. package/svelte.config.js +18 -0
  146. package/tsconfig.json +19 -0
  147. package/vite.config.js +45 -0
  148. package/vitest.config.ts +21 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @plures/design-dojo — design tokens
3
+ *
4
+ * Defines the global CSS custom properties (design tokens) used across
5
+ * all Plures applications and components.
6
+ */
7
+
8
+ :root {
9
+ /* ── Surface ───────────────────────────────────────────────── */
10
+ --surface-1: #1a1a2e;
11
+ --surface-2: #16213e;
12
+ --surface-3: #0f3460;
13
+ --surface-4: #533483;
14
+
15
+ /* ── Text ──────────────────────────────────────────────────── */
16
+ --text-1: #e0e0e0;
17
+ --text-2: #a0a0b0;
18
+ --text-3: #606070;
19
+
20
+ /* ── Brand / Accent ────────────────────────────────────────── */
21
+ --brand: #00d4ff;
22
+ --brand-2: #7b2fff;
23
+ --accent: #ff6b6b;
24
+
25
+ /* ── Status ────────────────────────────────────────────────── */
26
+ --success: #4caf50;
27
+ --warning: #ff9800;
28
+ --error: #f44336;
29
+ --info: #2196f3;
30
+
31
+ /* ── Border ────────────────────────────────────────────────── */
32
+ --border-color: rgba(255, 255, 255, 0.1);
33
+ --border-color-strong: rgba(255, 255, 255, 0.25);
34
+
35
+ /* ── Spacing ───────────────────────────────────────────────── */
36
+ --space-1: 0.25rem;
37
+ --space-2: 0.5rem;
38
+ --space-3: 1rem;
39
+ --space-4: 1.5rem;
40
+ --space-5: 2rem;
41
+ --space-6: 3rem;
42
+
43
+ /* ── Radius ────────────────────────────────────────────────── */
44
+ --radius-1: 2px;
45
+ --radius-2: 4px;
46
+ --radius-3: 8px;
47
+ --radius-4: 16px;
48
+ --radius-round: 9999px;
49
+
50
+ /* ── Typography ─────────────────────────────────────────────── */
51
+ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
52
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace;
53
+ --font-size-0: 0.75rem;
54
+ --font-size-1: 0.875rem;
55
+ --font-size-2: 1rem;
56
+ --font-size-3: 1.25rem;
57
+ --font-size-4: 1.5rem;
58
+ --font-size-5: 2rem;
59
+
60
+ /* ── Shadow ────────────────────────────────────────────────── */
61
+ --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.4);
62
+ --shadow-2: 0 4px 8px rgba(0, 0, 0, 0.5);
63
+ --shadow-3: 0 8px 24px rgba(0, 0, 0, 0.6);
64
+
65
+ /* ── Transition ─────────────────────────────────────────────── */
66
+ --transition-fast: 100ms ease;
67
+ --transition-base: 200ms ease;
68
+ --transition-slow: 400ms ease;
69
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from '@playwright/test';
2
+
3
+ export default defineConfig({
4
+ testDir: './e2e',
5
+ retries: process.env.CI ? 1 : 0,
6
+ use: {
7
+ trace: 'retain-on-failure',
8
+ screenshot: 'only-on-failure',
9
+ },
10
+ webServer: {
11
+ command: 'npm run build && npm run preview -- --host 127.0.0.1 --port 4173',
12
+ port: 4173,
13
+ reuseExistingServer: !process.env.CI,
14
+ timeout: 180_000,
15
+ },
16
+ });
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script to verify that all version numbers are synchronized across the project
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ function getPackageJsonVersion() {
10
+ const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
11
+ return pkg.version;
12
+ }
13
+
14
+ function getCargoTomlVersion() {
15
+ const cargo = fs.readFileSync('src-tauri/Cargo.toml', 'utf8');
16
+ const match = cargo.match(/^version = "(.+)"$/m);
17
+ return match ? match[1] : null;
18
+ }
19
+
20
+ function getTauriConfVersion() {
21
+ const config = JSON.parse(fs.readFileSync('src-tauri/tauri.conf.json', 'utf8'));
22
+ return config.version;
23
+ }
24
+
25
+ function main() {
26
+ const packageVersion = getPackageJsonVersion();
27
+ const cargoVersion = getCargoTomlVersion();
28
+ const tauriVersion = getTauriConfVersion();
29
+
30
+ console.log('Version Check:');
31
+ console.log('--------------');
32
+ console.log(`package.json: ${packageVersion}`);
33
+ console.log(`src-tauri/Cargo.toml: ${cargoVersion}`);
34
+ console.log(`src-tauri/tauri.conf.json: ${tauriVersion}`);
35
+ console.log('');
36
+
37
+ const allMatch = packageVersion === cargoVersion && packageVersion === tauriVersion;
38
+
39
+ if (allMatch) {
40
+ console.log('✅ All versions are synchronized!');
41
+ process.exit(0);
42
+ } else {
43
+ console.error('❌ Version mismatch detected!');
44
+ console.error('');
45
+ console.error('Run the following commands to fix:');
46
+ console.error('1. Update package.json to the correct version');
47
+ console.error('2. Run: npm install');
48
+ console.error('3. Run the version-bump workflow from GitHub Actions');
49
+ process.exit(1);
50
+ }
51
+ }
52
+
53
+ if (require.main === module) {
54
+ try {
55
+ main();
56
+ } catch (error) {
57
+ console.error('Error:', error.message);
58
+ process.exit(1);
59
+ }
60
+ }
61
+
62
+ module.exports = { getPackageJsonVersion, getCargoTomlVersion, getTauriConfVersion };
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env bash
2
+ # RuneBook Ambient Agent Mode - "Zero to Hero" Demo Script
3
+ # This script demonstrates the full workflow from enabling the agent to viewing analysis results
4
+
5
+ set -e # Exit on error
6
+
7
+ # Colors for output
8
+ RED='\033[0;31m'
9
+ GREEN='\033[0;32m'
10
+ YELLOW='\033[1;33m'
11
+ BLUE='\033[0;34m'
12
+ NC='\033[0m' # No Color
13
+
14
+ # Helper functions
15
+ print_step() {
16
+ echo -e "\n${BLUE}=== $1 ===${NC}\n"
17
+ }
18
+
19
+ print_success() {
20
+ echo -e "${GREEN}✓ $1${NC}"
21
+ }
22
+
23
+ print_error() {
24
+ echo -e "${RED}✗ $1${NC}"
25
+ }
26
+
27
+ print_info() {
28
+ echo -e "${YELLOW}ℹ $1${NC}"
29
+ }
30
+
31
+ wait_for_user() {
32
+ echo -e "\n${YELLOW}Press Enter to continue...${NC}"
33
+ read -r
34
+ }
35
+
36
+ # Check prerequisites
37
+ check_prerequisites() {
38
+ print_step "Checking Prerequisites"
39
+
40
+ if ! command -v node &> /dev/null; then
41
+ print_error "Node.js is not installed"
42
+ exit 1
43
+ fi
44
+ print_success "Node.js found"
45
+
46
+ if ! command -v npm &> /dev/null; then
47
+ print_error "npm is not installed"
48
+ exit 1
49
+ fi
50
+ print_success "npm found"
51
+
52
+ if ! command -v nix &> /dev/null; then
53
+ print_warning "Nix is not installed - some demo commands may not work"
54
+ else
55
+ print_success "Nix found"
56
+ fi
57
+ }
58
+
59
+ # Step 1: Enable Agent
60
+ enable_agent() {
61
+ print_step "Step 1: Enabling Ambient Agent Mode"
62
+
63
+ print_info "Enabling agent..."
64
+ npm run agent enable || {
65
+ print_error "Failed to enable agent"
66
+ exit 1
67
+ }
68
+ print_success "Agent enabled"
69
+
70
+ print_info "Checking agent status..."
71
+ npm run agent status
72
+ wait_for_user
73
+ }
74
+
75
+ # Step 2: Run failing commands
76
+ run_failing_commands() {
77
+ print_step "Step 2: Running Failing Nix Commands"
78
+
79
+ print_info "These commands will fail intentionally to demonstrate error capture and analysis"
80
+
81
+ # Command 1: Missing attribute
82
+ print_info "Running: nix build .#cursor (will fail - missing attribute)"
83
+ nix build .#cursor 2>&1 || true
84
+ sleep 1
85
+
86
+ # Command 2: Flake-parts template path
87
+ print_info "Running: nix flake init -t flake-parts#devShells (may fail - template path)"
88
+ nix flake init -t flake-parts#devShells 2>&1 || true
89
+ sleep 1
90
+
91
+ # Command 3: Build environment (may fail)
92
+ print_info "Running: nix build (may fail - build environment)"
93
+ nix build 2>&1 || true
94
+ sleep 1
95
+
96
+ print_success "Commands executed (failures are expected)"
97
+ wait_for_user
98
+ }
99
+
100
+ # Step 3: View captured events
101
+ view_events() {
102
+ print_step "Step 3: Viewing Captured Events"
103
+
104
+ print_info "Showing last 10 events..."
105
+ npm run agent events 10
106
+ wait_for_user
107
+ }
108
+
109
+ # Step 4: Analyze last failure
110
+ analyze_failure() {
111
+ print_step "Step 4: Analyzing Last Failure"
112
+
113
+ print_info "Analyzing the most recent command failure..."
114
+ npm run analyze last || {
115
+ print_error "Analysis failed or no failures found"
116
+ print_info "This is okay if no failures were captured"
117
+ }
118
+ wait_for_user
119
+ }
120
+
121
+ # Step 5: View suggestions
122
+ view_suggestions() {
123
+ print_step "Step 5: Viewing Suggestions"
124
+
125
+ print_info "Showing all current suggestions..."
126
+ npm run agent suggestions
127
+ wait_for_user
128
+ }
129
+
130
+ # Step 6: Inspect memory (if PluresDB available)
131
+ inspect_memory() {
132
+ print_step "Step 6: Inspecting Memory Storage"
133
+
134
+ print_info "Attempting to inspect cognitive memory..."
135
+ npm run memory inspect || {
136
+ print_info "PluresDB not available - this is okay, using in-memory storage"
137
+ print_info "To use PluresDB, start it with: pluresdb --port 34567"
138
+ }
139
+ wait_for_user
140
+ }
141
+
142
+ # Step 7: View statistics
143
+ view_statistics() {
144
+ print_step "Step 7: Viewing Agent Statistics"
145
+
146
+ print_info "Showing agent status and statistics..."
147
+ npm run agent status
148
+ wait_for_user
149
+ }
150
+
151
+ # Step 8: Observer mode (optional)
152
+ observer_demo() {
153
+ print_step "Step 8: Observer Mode (Optional)"
154
+
155
+ print_info "Enabling observer for detailed event capture..."
156
+ npm run observer enable || {
157
+ print_info "Observer enable failed - continuing anyway"
158
+ }
159
+
160
+ print_info "Showing observer status..."
161
+ npm run observer status || {
162
+ print_info "Observer status failed - continuing anyway"
163
+ }
164
+
165
+ print_info "To tail events in real-time, run: npm run observer events tail"
166
+ wait_for_user
167
+ }
168
+
169
+ # Step 9: Cleanup (optional)
170
+ cleanup_demo() {
171
+ print_step "Step 9: Cleanup (Optional)"
172
+
173
+ print_info "You can clear old events with: npm run agent clear [days]"
174
+ print_info "Example: npm run agent clear 7 (clears events older than 7 days)"
175
+
176
+ read -p "Clear events now? (y/N): " -n 1 -r
177
+ echo
178
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
179
+ print_info "Clearing events older than 30 days..."
180
+ npm run agent clear 30 || {
181
+ print_error "Failed to clear events"
182
+ }
183
+ else
184
+ print_info "Skipping cleanup"
185
+ fi
186
+ wait_for_user
187
+ }
188
+
189
+ # Main demo flow
190
+ main() {
191
+ echo -e "${GREEN}"
192
+ echo "╔════════════════════════════════════════════════════════════╗"
193
+ echo "║ RuneBook Ambient Agent Mode - Zero to Hero Demo ║"
194
+ echo "╚════════════════════════════════════════════════════════════╝"
195
+ echo -e "${NC}"
196
+
197
+ check_prerequisites
198
+ enable_agent
199
+ run_failing_commands
200
+ view_events
201
+ analyze_failure
202
+ view_suggestions
203
+ inspect_memory
204
+ view_statistics
205
+ observer_demo
206
+ cleanup_demo
207
+
208
+ print_step "Demo Complete!"
209
+ echo -e "${GREEN}Thank you for trying RuneBook Ambient Agent Mode!${NC}"
210
+ echo ""
211
+ echo "Next steps:"
212
+ echo " - Read docs/demo.md for detailed walkthrough"
213
+ echo " - Check README.md for full feature list"
214
+ echo " - Explore ANALYSIS_LADDER.md for analysis details"
215
+ echo ""
216
+ }
217
+
218
+ # Run main function
219
+ main
220
+
package/shell.nix ADDED
@@ -0,0 +1,31 @@
1
+ # Development shell for RuneBook
2
+ # Usage: nix-shell
3
+
4
+ { pkgs ? import <nixpkgs> {} }:
5
+
6
+ pkgs.mkShell {
7
+ buildInputs = with pkgs; [
8
+ nodejs_20
9
+ rustc
10
+ cargo
11
+ pkg-config
12
+ openssl
13
+ webkitgtk_4_1
14
+ librsvg
15
+ tauri-cli
16
+ ];
17
+
18
+ shellHook = ''
19
+ echo "RuneBook Development Environment"
20
+ echo "Node.js: $(node --version)"
21
+ echo "Rust: $(rustc --version)"
22
+ echo ""
23
+ echo "Available commands:"
24
+ echo " npm install - Install dependencies"
25
+ echo " npm run dev - Start development server"
26
+ echo " npm run build - Build the application"
27
+ echo " npm test - Run tests"
28
+ echo " npm run agent - Run agent CLI"
29
+ '';
30
+ }
31
+
package/src/app.html ADDED
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <title>Tauri + SvelteKit + Typescript App</title>
8
+ %sveltekit.head%
9
+ </head>
10
+ <body data-sveltekit-preload-data="hover">
11
+ <div style="display: contents">%sveltekit.body%</div>
12
+ </body>
13
+ </html>