@starlove/orbit 1.1.1 → 1.1.11

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 (103) hide show
  1. package/.dockerignore +0 -0
  2. package/Dockerfile +0 -0
  3. package/LICENSE +0 -0
  4. package/README.md +2 -2
  5. package/SKILL-ORBIT.md +2 -0
  6. package/build.mjs +0 -0
  7. package/dist/full/apple-touch-icon.png +0 -0
  8. package/dist/full/cursors/live_arrow.cur +0 -0
  9. package/dist/full/cursors/live_link.cur +0 -0
  10. package/dist/full/cursors/live_move.cur +0 -0
  11. package/dist/full/cursors/live_select.cur +0 -0
  12. package/dist/full/cursors/live_unavail.cur +0 -0
  13. package/dist/full/favicon-32x32.png +0 -0
  14. package/dist/full/index.html +160 -15
  15. package/dist/full/js/app.55b38e12.js +698 -0
  16. package/dist/full/js/app.55b38e12.js.map +7 -0
  17. package/dist/full/orbits-favicon.png +0 -0
  18. package/dist/full/orbits-logo-bg.png +0 -0
  19. package/dist/full/orbits-logo.png +0 -0
  20. package/dist/full/{styles.836872e7.css → styles.273fc37a.css} +79 -39
  21. package/dist/full/version.json +2 -2
  22. package/docs/AGENT_PROTOCOL.md +22 -6
  23. package/docs/MCP_SETUP.md +0 -0
  24. package/docs/ORBIT_DISPATCH.md +68 -8
  25. package/docs/SS-Orbit-Dark.png +0 -0
  26. package/docs/SS-Orbit-Light.png +0 -0
  27. package/docs/mcp-client.example.json +0 -0
  28. package/docs/setup/orbit-init-wizard.md +0 -0
  29. package/package.json +1 -1
  30. package/public/apple-touch-icon.png +0 -0
  31. package/public/cursors/live_arrow.cur +0 -0
  32. package/public/cursors/live_link.cur +0 -0
  33. package/public/cursors/live_move.cur +0 -0
  34. package/public/cursors/live_select.cur +0 -0
  35. package/public/cursors/live_unavail.cur +0 -0
  36. package/public/favicon-32x32.png +0 -0
  37. package/public/index.html +158 -13
  38. package/public/js/actor-labels.js +0 -0
  39. package/public/js/api.js +0 -0
  40. package/public/js/app.js +0 -0
  41. package/public/js/board-menu.js +0 -0
  42. package/public/js/card-actions.js +19 -0
  43. package/public/js/config.js +0 -0
  44. package/public/js/create-card.js +0 -0
  45. package/public/js/dom.js +0 -0
  46. package/public/js/drawer.js +17 -43
  47. package/public/js/format.js +5 -5
  48. package/public/js/kanban.js +157 -92
  49. package/public/js/local-backend.js +15 -4
  50. package/public/js/main.js +2 -1
  51. package/public/js/modal.js +0 -0
  52. package/public/js/motion-preference.js +14 -3
  53. package/public/js/router.js +0 -0
  54. package/public/js/search.js +0 -0
  55. package/public/js/settings-tabs.js +0 -0
  56. package/public/js/settings.js +131 -27
  57. package/public/js/sse.js +0 -0
  58. package/public/js/starscape.js +0 -0
  59. package/public/js/state.js +0 -0
  60. package/public/js/theme-preference.js +0 -0
  61. package/public/js/ticket-detail.js +88 -20
  62. package/public/js/toast.js +0 -0
  63. package/public/js/transport.js +0 -0
  64. package/public/js/unread.js +0 -0
  65. package/public/js/url-routes.js +0 -0
  66. package/public/orbits-favicon.png +0 -0
  67. package/public/orbits-logo-bg.png +0 -0
  68. package/public/orbits-logo.png +0 -0
  69. package/public/styles.css +79 -39
  70. package/src/cli/orbit.js +22 -0
  71. package/src/core/agent.js +25 -4
  72. package/src/core/agents-md.js +0 -0
  73. package/src/core/attachments.js +0 -0
  74. package/src/core/auth.js +0 -0
  75. package/src/core/backups.js +0 -0
  76. package/src/core/board.js +2 -1
  77. package/src/core/boards.js +0 -0
  78. package/src/core/bootstrap.js +0 -0
  79. package/src/core/db.js +19 -0
  80. package/src/core/delete-board.js +0 -0
  81. package/src/core/dispatch.js +178 -13
  82. package/src/core/events.js +0 -0
  83. package/src/core/http.js +0 -0
  84. package/src/core/migrate.js +0 -0
  85. package/src/core/paths.js +0 -0
  86. package/src/core/provision-repo-board.js +0 -0
  87. package/src/core/queries.js +0 -0
  88. package/src/core/registry.js +2 -2
  89. package/src/core/relations.js +0 -0
  90. package/src/core/review-verdicts.js +138 -0
  91. package/src/core/router.js +38 -3
  92. package/src/core/search.js +0 -0
  93. package/src/core/seed.js +0 -0
  94. package/src/core/snapshots.js +429 -9
  95. package/src/core/states.js +0 -0
  96. package/src/core/system-picker.js +0 -0
  97. package/src/core/tickets.js +0 -0
  98. package/src/core/util.js +0 -0
  99. package/src/mcp/orbit-client.js +47 -19
  100. package/src/mcp-server.js +122 -26
  101. package/src/server.js +0 -0
  102. package/dist/full/js/app.a4f045fc.js +0 -676
  103. package/dist/full/js/app.a4f045fc.js.map +0 -7
package/.dockerignore CHANGED
File without changes
package/Dockerfile CHANGED
File without changes
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -176,8 +176,8 @@ A copy-editable client config lives at [docs/mcp-client.example.json](docs/mcp-c
176
176
  | Purpose | Tool |
177
177
  | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
178
178
  | Index | `board_list` (tiny registry), `board_set_active` |
179
- | Board context | `board_context` (settings + journal + deployment; optional board + `include_struck`) |
180
- | Read | `board_read_ticket`, `board_read_comments`, `board_get_ticket_context` (heavy), `board_get_ticket_relations`, `board_get_ticket_blockers`, `board_search`, `board_list_archive` |
179
+ | Board context | `board_context` (settings + journal + deployment; optional board + `include_struck`) |
180
+ | Read | `board_read_ticket`, `board_read_comments`, `board_get_ticket_context` (lean), `board_get_ticket_context_full` (manual/journal), `board_get_ticket_relations`, `board_get_ticket_blockers`, `board_search`, `board_list_archive` |
181
181
  | Agent flow | `board_claim_next`, `board_checkpoint`, `board_complete` |
182
182
  | Write | `board_update_ticket`, `board_add_comment`, `board_add_board_entry`, `board_archive_ticket`, `board_restore_ticket`, `board_delete_ticket` |
183
183
  | Admin | `board_export_board`, `board_update_settings` |
package/SKILL-ORBIT.md CHANGED
@@ -75,6 +75,8 @@ Use board-level memory entries for durable history:
75
75
  - `decision`: UX or architecture choices agents should follow instead of defaulting to generic codegen.
76
76
  - `lesson`: mistakes or discoveries distilled as "do X instead of Y when working with Z."
77
77
 
78
+ Board entries are durable project memory, not general notes or persona guidance. Keep active entries focused on mechanisms, architectural/product boundaries, workflow invariants, public-product implications, and reusable pitfalls. Prefer ticket comments/implementation fields for one-run chronology, and strike or consolidate stale overlapping entries once a doctrine stabilizes.
79
+
78
80
  ## Ticket Relationships
79
81
 
80
82
  Two distinct, non-overlapping mechanisms:
package/build.mjs CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -15,9 +15,129 @@
15
15
  sizes="180x180"
16
16
  href="./apple-touch-icon.png"
17
17
  />
18
- <link rel="stylesheet" href="styles.836872e7.css" />
18
+ <!-- Apply the stored theme + motion preference before first paint, so
19
+ the app underneath the splash paints in the right theme (no flash)
20
+ and the splash respects an explicit reduce-motion choice. Mirrors
21
+ theme-preference.js (mab_theme) and motion-preference.js
22
+ (mab_reduce_motion → data-motion); main.js reconciles on load. -->
23
+ <script>
24
+ try {
25
+ var t = localStorage.getItem("mab_theme");
26
+ if (t === "light" || t === "dark")
27
+ document.documentElement.setAttribute("data-theme", t);
28
+ var rm = localStorage.getItem("mab_reduce_motion");
29
+ if (rm === "true")
30
+ document.documentElement.setAttribute("data-motion", "reduce");
31
+ else if (rm === "false")
32
+ document.documentElement.setAttribute("data-motion", "full");
33
+ } catch (e) {}
34
+ </script>
35
+ <link rel="preload" as="image" href="./orbits-logo.png" />
36
+ <link rel="stylesheet" href="styles.273fc37a.css" />
37
+ <!-- Boot splash — the canonical ss-ui loading screen (see the package's
38
+ components/loader.css). Inline critical CSS so it paints before
39
+ /js/main.js loads. The logo grows in then breathes; no spinner.
40
+ Keyframes namespaced `ss-loader-*`. Under reduced motion the grow-in
41
+ is dropped and the dot grid stops; the gentle breathe stays. -->
42
+ <style>
43
+ .ss-loader {
44
+ position: fixed;
45
+ inset: 0;
46
+ z-index: 99999;
47
+ display: flex;
48
+ flex-direction: column;
49
+ align-items: center;
50
+ justify-content: center;
51
+ gap: 2rem;
52
+ overflow: hidden;
53
+ background: linear-gradient(
54
+ 135deg,
55
+ #1a1a2e 0%,
56
+ #16213e 50%,
57
+ #0f3460 100%
58
+ );
59
+ transition: opacity 0.4s ease;
60
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
61
+ Roboto, "Helvetica Neue", Arial, sans-serif;
62
+ }
63
+ .ss-loader::before {
64
+ content: "";
65
+ position: absolute;
66
+ width: 200%;
67
+ height: 200%;
68
+ background-image: radial-gradient(
69
+ circle,
70
+ rgba(168, 192, 255, 0.15) 1px,
71
+ transparent 1px
72
+ );
73
+ background-size: 50px 50px;
74
+ will-change: transform;
75
+ animation: ss-loader-drift 20s linear infinite;
76
+ }
77
+ .ss-loader.is-hiding {
78
+ opacity: 0;
79
+ pointer-events: none;
80
+ }
81
+ .ss-loader__logo {
82
+ width: 120px;
83
+ height: 120px;
84
+ object-fit: contain;
85
+ filter: drop-shadow(0 0 20px rgba(255, 255, 255, 0.3));
86
+ transform-origin: center;
87
+ will-change: transform;
88
+ animation:
89
+ ss-loader-grow 0.6s cubic-bezier(0.22, 1, 0.36, 1) both,
90
+ ss-loader-breathe 3s ease-in-out 0.6s infinite;
91
+ }
92
+ .ss-loader__label {
93
+ margin: 0;
94
+ color: #fff;
95
+ font-size: 1.25rem;
96
+ font-weight: 600;
97
+ letter-spacing: 0.5px;
98
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
99
+ }
100
+ @keyframes ss-loader-drift {
101
+ from { transform: translate(0, 0); }
102
+ to { transform: translate(-50px, -50px); }
103
+ }
104
+ @keyframes ss-loader-grow {
105
+ from { transform: scale(0); opacity: 0; }
106
+ to { transform: scale(1); opacity: 1; }
107
+ }
108
+ @keyframes ss-loader-breathe {
109
+ 0%, 100% { transform: scale(1); }
110
+ 50% { transform: scale(1.06); }
111
+ }
112
+ @media (prefers-reduced-motion: reduce) {
113
+ :root:not([data-motion="full"]) .ss-loader::before {
114
+ animation: none;
115
+ }
116
+ :root:not([data-motion="full"]) .ss-loader__logo {
117
+ animation: ss-loader-breathe 3s ease-in-out infinite;
118
+ }
119
+ }
120
+ [data-motion="reduce"] .ss-loader::before {
121
+ animation: none;
122
+ }
123
+ [data-motion="reduce"] .ss-loader__logo {
124
+ animation: ss-loader-breathe 3s ease-in-out infinite;
125
+ }
126
+ </style>
19
127
  </head>
20
128
  <body>
129
+ <!-- Boot splash - shown immediately, removed once the app is ready. -->
130
+ <div id="ss-loader" class="ss-loader" role="status" aria-live="polite">
131
+ <img
132
+ class="ss-loader__logo"
133
+ src="./orbits-logo.png"
134
+ alt="Orbit"
135
+ width="120"
136
+ height="120"
137
+ />
138
+ <p class="ss-loader__label">Loading Orbit…</p>
139
+ </div>
140
+
21
141
  <div class="grain">
22
142
  <div class="milky-way" aria-hidden="true"></div>
23
143
  </div>
@@ -170,19 +290,10 @@
170
290
  ></div>
171
291
  <aside id="drawer" class="drawer" hidden aria-label="Panel">
172
292
  <header class="drawer-header">
173
- <div class="drawer-title-block">
174
- <span
175
- id="drawerEyebrow"
176
- class="drawer-eyebrow"
177
- hidden
178
- ></span>
179
- <h2 id="drawerTitle" class="drawer-title-text"></h2>
180
- <div
181
- id="drawerSubtitle"
182
- class="drawer-subtitle"
183
- hidden
184
- ></div>
185
- </div>
293
+ <div
294
+ id="drawerTitleBlock"
295
+ class="drawer-title-block"
296
+ ></div>
186
297
  <nav
187
298
  id="drawerTabs"
188
299
  class="drawer-tabs"
@@ -309,6 +420,40 @@
309
420
  </div>
310
421
  </dialog>
311
422
 
312
- <script src="js/app.a4f045fc.js" type="module"></script>
423
+ <script src="js/app.55b38e12.js" type="module"></script>
424
+ <!-- Fade out the boot splash once the DOM is ready. The /js/main.js
425
+ module runs before DOMContentLoaded, so theme/motion + wiring are
426
+ already applied by the time this fires. -->
427
+ <script>
428
+ (function () {
429
+ function hideSplash() {
430
+ var splash = document.getElementById("ss-loader");
431
+ if (!splash) return;
432
+ // Keep the splash up for a minimum of 786ms (measured from
433
+ // navigation start) so a fast load doesn't flash it in and out.
434
+ var wait = Math.max(0, 786 - performance.now());
435
+ setTimeout(function () {
436
+ splash.classList.add("is-hiding");
437
+ splash.addEventListener(
438
+ "transitionend",
439
+ function () {
440
+ splash.remove();
441
+ },
442
+ { once: true }
443
+ );
444
+ setTimeout(function () {
445
+ splash.remove();
446
+ }, 600);
447
+ }, wait);
448
+ }
449
+ if (document.readyState === "loading") {
450
+ document.addEventListener("DOMContentLoaded", hideSplash, {
451
+ once: true
452
+ });
453
+ } else {
454
+ hideSplash();
455
+ }
456
+ })();
457
+ </script>
313
458
  </body>
314
459
  </html>