jettypod 4.4.120 → 4.4.121

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 (208) hide show
  1. package/.env +2 -1
  2. package/Cargo.lock +6450 -0
  3. package/Cargo.toml +35 -0
  4. package/README.md +5 -1
  5. package/TAURI-MIGRATION-PLAN.md +840 -0
  6. package/apps/dashboard/app/connect-claude/page.tsx +5 -6
  7. package/apps/dashboard/app/decision/[id]/page.tsx +54 -49
  8. package/apps/dashboard/app/demo/gates/page.tsx +3 -5
  9. package/apps/dashboard/app/design-system/page.tsx +1 -1
  10. package/apps/dashboard/app/globals.css +74 -2
  11. package/apps/dashboard/app/install-claude/page.tsx +3 -5
  12. package/apps/dashboard/app/login/page.tsx +17 -20
  13. package/apps/dashboard/app/page.tsx +101 -48
  14. package/apps/dashboard/app/settings/page.tsx +60 -12
  15. package/apps/dashboard/app/signup/page.tsx +14 -17
  16. package/apps/dashboard/app/subscribe/page.tsx +0 -2
  17. package/apps/dashboard/app/tests/page.tsx +37 -4
  18. package/apps/dashboard/app/welcome/page.tsx +12 -15
  19. package/apps/dashboard/app/work/[id]/page.tsx +90 -75
  20. package/apps/dashboard/app/work/[id]/proof/page.tsx +1489 -0
  21. package/apps/dashboard/components/AppShell.tsx +70 -61
  22. package/apps/dashboard/components/CardMenu.tsx +0 -1
  23. package/apps/dashboard/components/ClaudePanel.tsx +541 -283
  24. package/apps/dashboard/components/ClaudePanelInput.tsx +23 -4
  25. package/apps/dashboard/components/ConnectClaudeScreen.tsx +1 -5
  26. package/apps/dashboard/components/CopyableId.tsx +1 -2
  27. package/apps/dashboard/components/DetailReviewActions.tsx +11 -20
  28. package/apps/dashboard/components/DragContext.tsx +132 -62
  29. package/apps/dashboard/components/DraggableCard.tsx +3 -5
  30. package/apps/dashboard/components/DropZone.tsx +5 -6
  31. package/apps/dashboard/components/EditableDetailDescription.tsx +6 -12
  32. package/apps/dashboard/components/EditableDetailTitle.tsx +6 -13
  33. package/apps/dashboard/components/EditableTitle.tsx +0 -1
  34. package/apps/dashboard/components/ElapsedTimer.tsx +15 -3
  35. package/apps/dashboard/components/EpicGroup.tsx +100 -70
  36. package/apps/dashboard/components/GateCard.tsx +0 -1
  37. package/apps/dashboard/components/GateChoiceCard.tsx +1 -2
  38. package/apps/dashboard/components/InstallClaudeScreen.tsx +1 -5
  39. package/apps/dashboard/components/JettyLoader.tsx +0 -1
  40. package/apps/dashboard/components/KanbanBoard.tsx +319 -173
  41. package/apps/dashboard/components/KanbanCard.tsx +341 -107
  42. package/apps/dashboard/components/LazyCard.tsx +62 -0
  43. package/apps/dashboard/components/LazyMarkdown.tsx +0 -1
  44. package/apps/dashboard/components/MainNav.tsx +24 -25
  45. package/apps/dashboard/components/MessageBlock.tsx +93 -16
  46. package/apps/dashboard/components/ModeStartCard.tsx +0 -1
  47. package/apps/dashboard/components/OnboardingWelcome.tsx +0 -1
  48. package/apps/dashboard/components/PlaceholderCard.tsx +0 -1
  49. package/apps/dashboard/components/ProjectSwitcher.tsx +20 -20
  50. package/apps/dashboard/components/PrototypeTimeline.tsx +47 -26
  51. package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +308 -223
  52. package/apps/dashboard/components/RealTimeTestsWrapper.tsx +303 -160
  53. package/apps/dashboard/components/ReviewFooter.tsx +12 -14
  54. package/apps/dashboard/components/SessionList.tsx +0 -1
  55. package/apps/dashboard/components/SubscribeContent.tsx +40 -11
  56. package/apps/dashboard/components/TestTree.tsx +1 -2
  57. package/apps/dashboard/components/TipCard.tsx +2 -4
  58. package/apps/dashboard/components/Toast.tsx +0 -1
  59. package/apps/dashboard/components/TypeIcon.tsx +7 -8
  60. package/apps/dashboard/components/ViewModeToolbar.tsx +104 -0
  61. package/apps/dashboard/components/WaveCompletionAnimation.tsx +5 -17
  62. package/apps/dashboard/components/WelcomeScreen.tsx +2 -6
  63. package/apps/dashboard/components/WorkItemHeader.tsx +0 -1
  64. package/apps/dashboard/components/WorkItemTree.tsx +2 -4
  65. package/apps/dashboard/components/settings/AccountSection.tsx +27 -13
  66. package/apps/dashboard/components/settings/AiContextSection.tsx +89 -0
  67. package/apps/dashboard/components/settings/ContextDocumentsSection.tsx +317 -0
  68. package/apps/dashboard/components/settings/EnvVarsSection.tsx +20 -73
  69. package/apps/dashboard/components/settings/GeneralSection.tsx +137 -26
  70. package/apps/dashboard/components/settings/ProjectStackSection.tsx +948 -0
  71. package/apps/dashboard/components/settings/SettingsLayout.tsx +0 -1
  72. package/apps/dashboard/components/ui/Button.tsx +1 -1
  73. package/apps/dashboard/components/ui/Input.tsx +1 -1
  74. package/apps/dashboard/components.json +1 -1
  75. package/apps/dashboard/contexts/ClaudeSessionContext.tsx +611 -358
  76. package/apps/dashboard/contexts/ConnectionStatusContext.tsx +0 -1
  77. package/apps/dashboard/contexts/UsageContext.tsx +62 -31
  78. package/apps/dashboard/dev.sh +35 -0
  79. package/apps/dashboard/eslint.config.mjs +9 -9
  80. package/apps/dashboard/hooks/useWebSocket.ts +138 -83
  81. package/apps/dashboard/index.html +73 -0
  82. package/apps/dashboard/lib/data-bridge.ts +722 -0
  83. package/apps/dashboard/lib/db.ts +69 -1302
  84. package/apps/dashboard/lib/environment-config.ts +173 -0
  85. package/apps/dashboard/lib/environment-verification.ts +119 -0
  86. package/apps/dashboard/lib/kanban-utils.ts +226 -26
  87. package/apps/dashboard/lib/proof-run.ts +495 -0
  88. package/apps/dashboard/lib/proof-scenario-runner.ts +346 -0
  89. package/apps/dashboard/lib/service-recovery.ts +326 -0
  90. package/apps/dashboard/lib/session-state-machine.ts +1 -0
  91. package/apps/dashboard/lib/session-state-utils.ts +0 -164
  92. package/apps/dashboard/lib/session-stream-manager.ts +253 -122
  93. package/apps/dashboard/lib/stream-manager-registry.ts +46 -6
  94. package/apps/dashboard/lib/tauri-bridge.ts +102 -0
  95. package/apps/dashboard/lib/tauri.ts +106 -0
  96. package/apps/dashboard/lib/utils.ts +3 -3
  97. package/apps/dashboard/next-env.d.ts +1 -1
  98. package/apps/dashboard/package.json +21 -33
  99. package/apps/dashboard/public/bug-icon.png +0 -0
  100. package/apps/dashboard/public/buoy-icon.png +0 -0
  101. package/apps/dashboard/public/in-flight-seagull.png +0 -0
  102. package/apps/dashboard/public/pier-icon.png +0 -0
  103. package/apps/dashboard/public/star-icon.png +0 -0
  104. package/apps/dashboard/public/wrench-icon.png +0 -0
  105. package/apps/dashboard/scripts/tauri-build.js +228 -0
  106. package/apps/dashboard/scripts/upload-tauri-to-r2.js +125 -0
  107. package/apps/dashboard/src/main.tsx +12 -0
  108. package/apps/dashboard/src/router.tsx +107 -0
  109. package/apps/dashboard/src/vite-env.d.ts +1 -0
  110. package/apps/dashboard/tsconfig.json +7 -12
  111. package/apps/dashboard/tsconfig.tsbuildinfo +1 -1
  112. package/apps/dashboard/vite.config.ts +33 -0
  113. package/apps/update-server/src/index.ts +167 -30
  114. package/claude-hooks/global-guardrails.js +14 -13
  115. package/crates/jettypod-cli/Cargo.toml +19 -0
  116. package/crates/jettypod-cli/src/commands.rs +1249 -0
  117. package/crates/jettypod-cli/src/main.rs +595 -0
  118. package/crates/jettypod-core/Cargo.toml +26 -0
  119. package/crates/jettypod-core/build.rs +98 -0
  120. package/crates/jettypod-core/migrations/V1__baseline.sql +197 -0
  121. package/crates/jettypod-core/migrations/V2__work_items_indexes.sql +6 -0
  122. package/crates/jettypod-core/migrations/V3__qa_steps.sql +2 -0
  123. package/crates/jettypod-core/src/auth.rs +294 -0
  124. package/crates/jettypod-core/src/config.rs +397 -0
  125. package/crates/jettypod-core/src/db/mod.rs +507 -0
  126. package/crates/jettypod-core/src/db/recovery.rs +114 -0
  127. package/crates/jettypod-core/src/db/startup.rs +101 -0
  128. package/crates/jettypod-core/src/db/validate.rs +149 -0
  129. package/crates/jettypod-core/src/error.rs +76 -0
  130. package/crates/jettypod-core/src/git.rs +458 -0
  131. package/crates/jettypod-core/src/lib.rs +20 -0
  132. package/crates/jettypod-core/src/sessions.rs +625 -0
  133. package/crates/jettypod-core/src/skills.rs +556 -0
  134. package/crates/jettypod-core/src/work.rs +1086 -0
  135. package/crates/jettypod-core/src/worktree.rs +628 -0
  136. package/crates/jettypod-core/src/ws.rs +767 -0
  137. package/cucumber-test.cjs +6 -0
  138. package/jettypod.js +96 -4
  139. package/lib/bdd-preflight.js +96 -0
  140. package/lib/merge-lock.js +111 -253
  141. package/lib/migrations/030-rejection-round-columns.js +54 -0
  142. package/lib/migrations/031-session-isolation-index.js +17 -0
  143. package/lib/work-commands/index.js +58 -16
  144. package/lib/work-tracking/index.js +108 -8
  145. package/package.json +1 -1
  146. package/skills-templates/bug-mode/SKILL.md +43 -1
  147. package/skills-templates/chore-mode/SKILL.md +40 -1
  148. package/skills-templates/design-system-selection/SKILL.md +273 -0
  149. package/skills-templates/epic-planning/SKILL.md +14 -0
  150. package/skills-templates/feature-planning/SKILL.md +90 -1
  151. package/skills-templates/production-mode/SKILL.md +20 -0
  152. package/skills-templates/simple-improvement/SKILL.md +39 -2
  153. package/skills-templates/speed-mode/SKILL.md +10 -15
  154. package/skills-templates/stable-mode/SKILL.md +47 -0
  155. package/apps/dashboard/README.md +0 -36
  156. package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +0 -446
  157. package/apps/dashboard/app/api/claude/[workItemId]/pin/route.ts +0 -24
  158. package/apps/dashboard/app/api/claude/[workItemId]/route.ts +0 -280
  159. package/apps/dashboard/app/api/claude/sessions/[sessionId]/content/route.ts +0 -52
  160. package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +0 -525
  161. package/apps/dashboard/app/api/claude/sessions/[sessionId]/pin/route.ts +0 -24
  162. package/apps/dashboard/app/api/claude/sessions/cleanup/route.ts +0 -34
  163. package/apps/dashboard/app/api/claude/sessions/route.ts +0 -184
  164. package/apps/dashboard/app/api/decisions/[id]/route.ts +0 -25
  165. package/apps/dashboard/app/api/internal/set-project/route.ts +0 -17
  166. package/apps/dashboard/app/api/kanban/route.ts +0 -15
  167. package/apps/dashboard/app/api/settings/env-vars/route.ts +0 -125
  168. package/apps/dashboard/app/api/settings/general/route.ts +0 -21
  169. package/apps/dashboard/app/api/tests/route.ts +0 -9
  170. package/apps/dashboard/app/api/tests/run/route.ts +0 -82
  171. package/apps/dashboard/app/api/tests/run/stream/route.ts +0 -71
  172. package/apps/dashboard/app/api/tests/undefined/route.ts +0 -9
  173. package/apps/dashboard/app/api/usage/route.ts +0 -17
  174. package/apps/dashboard/app/api/work/[id]/description/route.ts +0 -21
  175. package/apps/dashboard/app/api/work/[id]/epic/route.ts +0 -21
  176. package/apps/dashboard/app/api/work/[id]/order/route.ts +0 -21
  177. package/apps/dashboard/app/api/work/[id]/route.ts +0 -35
  178. package/apps/dashboard/app/api/work/[id]/status/route.ts +0 -63
  179. package/apps/dashboard/app/api/work/[id]/title/route.ts +0 -21
  180. package/apps/dashboard/app/layout.tsx +0 -55
  181. package/apps/dashboard/components/UpgradeBanner.tsx +0 -30
  182. package/apps/dashboard/electron/ipc-handlers.js +0 -1026
  183. package/apps/dashboard/electron/main.js +0 -2306
  184. package/apps/dashboard/electron/preload.js +0 -125
  185. package/apps/dashboard/electron/session-manager.js +0 -163
  186. package/apps/dashboard/electron-builder.config.js +0 -357
  187. package/apps/dashboard/hooks/useClaudeSessions.ts +0 -299
  188. package/apps/dashboard/lib/backlog-parser.ts +0 -50
  189. package/apps/dashboard/lib/claude-process-manager.ts +0 -529
  190. package/apps/dashboard/lib/db-bridge.ts +0 -283
  191. package/apps/dashboard/lib/prototypes.ts +0 -202
  192. package/apps/dashboard/lib/test-results-db.ts +0 -307
  193. package/apps/dashboard/lib/tests.ts +0 -282
  194. package/apps/dashboard/next.config.js +0 -66
  195. package/apps/dashboard/postcss.config.mjs +0 -7
  196. package/apps/dashboard/public/bug-icon.svg +0 -9
  197. package/apps/dashboard/public/buoy-icon.svg +0 -9
  198. package/apps/dashboard/public/file.svg +0 -1
  199. package/apps/dashboard/public/globe.svg +0 -1
  200. package/apps/dashboard/public/in-flight-seagull.svg +0 -9
  201. package/apps/dashboard/public/next.svg +0 -1
  202. package/apps/dashboard/public/pier-icon.svg +0 -14
  203. package/apps/dashboard/public/star-icon.svg +0 -9
  204. package/apps/dashboard/public/vercel.svg +0 -1
  205. package/apps/dashboard/public/window.svg +0 -1
  206. package/apps/dashboard/public/wrench-icon.svg +0 -9
  207. package/apps/dashboard/scripts/download-node.js +0 -104
  208. package/apps/dashboard/scripts/upload-to-r2.js +0 -89
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Downloads Node.js binaries for bundling with the Electron app.
4
- * Run this before electron-builder to ensure Node.js is available.
5
- *
6
- * Usage: node scripts/download-node.js
7
- */
8
-
9
- const https = require('https');
10
- const fs = require('fs');
11
- const path = require('path');
12
- const { execSync } = require('child_process');
13
-
14
- const NODE_VERSION = 'v24.13.0'; // LTS Krypton
15
- const ARCHITECTURES = ['arm64', 'x64'];
16
- const OUTPUT_DIR = path.join(__dirname, '..', 'build-resources', 'node');
17
-
18
- function download(url, dest) {
19
- return new Promise((resolve, reject) => {
20
- const file = fs.createWriteStream(dest);
21
- https.get(url, (response) => {
22
- if (response.statusCode === 302 || response.statusCode === 301) {
23
- // Follow redirect
24
- https.get(response.headers.location, (res) => {
25
- res.pipe(file);
26
- file.on('finish', () => {
27
- file.close(resolve);
28
- });
29
- }).on('error', reject);
30
- } else {
31
- response.pipe(file);
32
- file.on('finish', () => {
33
- file.close(resolve);
34
- });
35
- }
36
- }).on('error', reject);
37
- });
38
- }
39
-
40
- async function downloadAndExtract(arch) {
41
- const archDir = path.join(OUTPUT_DIR, arch);
42
- const nodeDir = path.join(archDir, 'bin');
43
-
44
- // Check if already downloaded
45
- if (fs.existsSync(path.join(nodeDir, 'node'))) {
46
- console.log(`✓ Node.js ${arch} already exists`);
47
- return;
48
- }
49
-
50
- const tarball = `node-${NODE_VERSION}-darwin-${arch}.tar.gz`;
51
- const url = `https://nodejs.org/dist/${NODE_VERSION}/${tarball}`;
52
- const tarPath = path.join(OUTPUT_DIR, tarball);
53
-
54
- console.log(`Downloading Node.js ${NODE_VERSION} for ${arch}...`);
55
- await download(url, tarPath);
56
-
57
- console.log(`Extracting ${arch}...`);
58
- fs.mkdirSync(archDir, { recursive: true });
59
- execSync(`tar -xzf "${tarPath}" -C "${OUTPUT_DIR}"`, { stdio: 'inherit' });
60
-
61
- // Move extracted directory to arch name
62
- const extractedDir = path.join(OUTPUT_DIR, `node-${NODE_VERSION}-darwin-${arch}`);
63
- if (fs.existsSync(archDir)) {
64
- fs.rmSync(archDir, { recursive: true });
65
- }
66
- fs.renameSync(extractedDir, archDir);
67
-
68
- // Remove unnecessary files to reduce size
69
- const toRemove = ['include', 'share', 'CHANGELOG.md', 'LICENSE', 'README.md'];
70
- for (const item of toRemove) {
71
- const itemPath = path.join(archDir, item);
72
- if (fs.existsSync(itemPath)) {
73
- fs.rmSync(itemPath, { recursive: true });
74
- }
75
- }
76
-
77
- // Remove corepack (not needed)
78
- const corepackBin = path.join(archDir, 'bin', 'corepack');
79
- const corepackLib = path.join(archDir, 'lib', 'node_modules', 'corepack');
80
- if (fs.existsSync(corepackBin)) fs.rmSync(corepackBin);
81
- if (fs.existsSync(corepackLib)) fs.rmSync(corepackLib, { recursive: true });
82
-
83
- // Clean up tarball
84
- fs.rmSync(tarPath);
85
-
86
- console.log(`✓ Node.js ${arch} ready`);
87
- }
88
-
89
- async function main() {
90
- console.log(`\nPreparing Node.js ${NODE_VERSION} for bundling...\n`);
91
-
92
- fs.mkdirSync(OUTPUT_DIR, { recursive: true });
93
-
94
- for (const arch of ARCHITECTURES) {
95
- await downloadAndExtract(arch);
96
- }
97
-
98
- console.log('\n✓ All Node.js binaries ready for bundling\n');
99
- }
100
-
101
- main().catch((err) => {
102
- console.error('Failed to download Node.js:', err);
103
- process.exit(1);
104
- });
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Upload release artifacts to Cloudflare R2.
5
- * Run after electron-builder: npm run upload:r2
6
- *
7
- * Requires CLOUDFLARE_API_TOKEN env var (or wrangler login).
8
- * Uploads: latest-mac.yml, DMG, ZIP, and blockmap files.
9
- */
10
-
11
- const { execSync } = require('child_process');
12
- const fs = require('fs');
13
- const path = require('path');
14
-
15
- const BUCKET_NAME = 'jettypod-releases';
16
- const DIST_DIR = path.join(__dirname, '..', 'dist');
17
-
18
- // File patterns to upload
19
- const UPLOAD_PATTERNS = [
20
- /^latest-mac\.yml$/,
21
- /\.dmg$/,
22
- /\.zip$/,
23
- /\.blockmap$/,
24
- ];
25
-
26
- function findArtifacts() {
27
- if (!fs.existsSync(DIST_DIR)) {
28
- console.error(`❌ dist/ directory not found at ${DIST_DIR}`);
29
- console.error('Run electron:build first.');
30
- process.exit(1);
31
- }
32
-
33
- const files = fs.readdirSync(DIST_DIR);
34
- return files.filter((file) =>
35
- UPLOAD_PATTERNS.some((pattern) => pattern.test(file))
36
- );
37
- }
38
-
39
- function uploadFile(filename) {
40
- const filePath = path.join(DIST_DIR, filename);
41
- const stats = fs.statSync(filePath);
42
- const sizeMB = (stats.size / (1024 * 1024)).toFixed(1);
43
-
44
- console.log(` Uploading ${filename} (${sizeMB} MB)...`);
45
-
46
- try {
47
- execSync(
48
- `npx wrangler r2 object put "${BUCKET_NAME}/${filename}" --file="${filePath}" --remote`,
49
- { stdio: 'pipe' }
50
- );
51
- console.log(` ✅ ${filename}`);
52
- return true;
53
- } catch (error) {
54
- console.error(` ❌ Failed to upload ${filename}: ${error.message}`);
55
- return false;
56
- }
57
- }
58
-
59
- function main() {
60
- console.log('🚀 Uploading release artifacts to R2...\n');
61
-
62
- const artifacts = findArtifacts();
63
- if (artifacts.length === 0) {
64
- console.error('❌ No release artifacts found in dist/');
65
- console.error('Expected: latest-mac.yml, .dmg, .zip, or .blockmap files');
66
- process.exit(1);
67
- }
68
-
69
- console.log(`Found ${artifacts.length} artifact(s):\n`);
70
-
71
- let success = 0;
72
- let failed = 0;
73
-
74
- for (const artifact of artifacts) {
75
- if (uploadFile(artifact)) {
76
- success++;
77
- } else {
78
- failed++;
79
- }
80
- }
81
-
82
- console.log(`\n📦 Upload complete: ${success} uploaded, ${failed} failed`);
83
-
84
- if (failed > 0) {
85
- process.exit(1);
86
- }
87
- }
88
-
89
- main();