noterai 0.1.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 (191) hide show
  1. package/README.md +368 -0
  2. package/bin/noter.js +218 -0
  3. package/bin/noter.js.map +1 -0
  4. package/package.json +73 -0
  5. package/packages/client/dist/assets/geist-mono-latin-400-normal-CoULgQGM.woff +0 -0
  6. package/packages/client/dist/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2 +0 -0
  7. package/packages/client/dist/assets/index-CBiNAMaA.js +264 -0
  8. package/packages/client/dist/assets/index-u7i5Fle2.css +1 -0
  9. package/packages/client/dist/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff +0 -0
  10. package/packages/client/dist/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
  11. package/packages/client/dist/assets/space-grotesk-latin-600-normal-BflQw4A9.woff +0 -0
  12. package/packages/client/dist/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2 +0 -0
  13. package/packages/client/dist/assets/vendor-react-DHeZC_T5.js +17 -0
  14. package/packages/client/dist/index.html +14 -0
  15. package/packages/server/dist/adapters/claudeAdapter.d.ts +34 -0
  16. package/packages/server/dist/adapters/claudeAdapter.d.ts.map +1 -0
  17. package/packages/server/dist/adapters/claudeAdapter.js +281 -0
  18. package/packages/server/dist/adapters/claudeAdapter.js.map +1 -0
  19. package/packages/server/dist/adapters/codexAdapter.d.ts +39 -0
  20. package/packages/server/dist/adapters/codexAdapter.d.ts.map +1 -0
  21. package/packages/server/dist/adapters/codexAdapter.js +347 -0
  22. package/packages/server/dist/adapters/codexAdapter.js.map +1 -0
  23. package/packages/server/dist/adapters/droidAdapter.d.ts +34 -0
  24. package/packages/server/dist/adapters/droidAdapter.d.ts.map +1 -0
  25. package/packages/server/dist/adapters/droidAdapter.js +109 -0
  26. package/packages/server/dist/adapters/droidAdapter.js.map +1 -0
  27. package/packages/server/dist/adapters/genericAdapter.d.ts +50 -0
  28. package/packages/server/dist/adapters/genericAdapter.d.ts.map +1 -0
  29. package/packages/server/dist/adapters/genericAdapter.js +203 -0
  30. package/packages/server/dist/adapters/genericAdapter.js.map +1 -0
  31. package/packages/server/dist/adapters/index.d.ts +7 -0
  32. package/packages/server/dist/adapters/index.d.ts.map +1 -0
  33. package/packages/server/dist/adapters/index.js +7 -0
  34. package/packages/server/dist/adapters/index.js.map +1 -0
  35. package/packages/server/dist/adapters/opencodeAdapter.d.ts +28 -0
  36. package/packages/server/dist/adapters/opencodeAdapter.d.ts.map +1 -0
  37. package/packages/server/dist/adapters/opencodeAdapter.js +265 -0
  38. package/packages/server/dist/adapters/opencodeAdapter.js.map +1 -0
  39. package/packages/server/dist/adapters/opencodeSessionManager.d.ts +13 -0
  40. package/packages/server/dist/adapters/opencodeSessionManager.d.ts.map +1 -0
  41. package/packages/server/dist/adapters/opencodeSessionManager.js +230 -0
  42. package/packages/server/dist/adapters/opencodeSessionManager.js.map +1 -0
  43. package/packages/server/dist/adapters/pathUtils.d.ts +54 -0
  44. package/packages/server/dist/adapters/pathUtils.d.ts.map +1 -0
  45. package/packages/server/dist/adapters/pathUtils.js +86 -0
  46. package/packages/server/dist/adapters/pathUtils.js.map +1 -0
  47. package/packages/server/dist/adapters/piAdapter.d.ts +34 -0
  48. package/packages/server/dist/adapters/piAdapter.d.ts.map +1 -0
  49. package/packages/server/dist/adapters/piAdapter.js +307 -0
  50. package/packages/server/dist/adapters/piAdapter.js.map +1 -0
  51. package/packages/server/dist/autoDetect.d.ts +15 -0
  52. package/packages/server/dist/autoDetect.d.ts.map +1 -0
  53. package/packages/server/dist/autoDetect.js +102 -0
  54. package/packages/server/dist/autoDetect.js.map +1 -0
  55. package/packages/server/dist/config.d.ts +29 -0
  56. package/packages/server/dist/config.d.ts.map +1 -0
  57. package/packages/server/dist/config.js +96 -0
  58. package/packages/server/dist/config.js.map +1 -0
  59. package/packages/server/dist/eventStore.d.ts +14 -0
  60. package/packages/server/dist/eventStore.d.ts.map +1 -0
  61. package/packages/server/dist/eventStore.js +35 -0
  62. package/packages/server/dist/eventStore.js.map +1 -0
  63. package/packages/server/dist/hookWatcher.d.ts +24 -0
  64. package/packages/server/dist/hookWatcher.d.ts.map +1 -0
  65. package/packages/server/dist/hookWatcher.js +152 -0
  66. package/packages/server/dist/hookWatcher.js.map +1 -0
  67. package/packages/server/dist/index.d.ts +58 -0
  68. package/packages/server/dist/index.d.ts.map +1 -0
  69. package/packages/server/dist/index.js +527 -0
  70. package/packages/server/dist/index.js.map +1 -0
  71. package/packages/server/dist/llm/jsonExtractor.d.ts +39 -0
  72. package/packages/server/dist/llm/jsonExtractor.d.ts.map +1 -0
  73. package/packages/server/dist/llm/jsonExtractor.js +83 -0
  74. package/packages/server/dist/llm/jsonExtractor.js.map +1 -0
  75. package/packages/server/dist/llm/ollamaCache.d.ts +19 -0
  76. package/packages/server/dist/llm/ollamaCache.d.ts.map +1 -0
  77. package/packages/server/dist/llm/ollamaCache.js +31 -0
  78. package/packages/server/dist/llm/ollamaCache.js.map +1 -0
  79. package/packages/server/dist/llm/ollamaClient.d.ts +29 -0
  80. package/packages/server/dist/llm/ollamaClient.d.ts.map +1 -0
  81. package/packages/server/dist/llm/ollamaClient.js +117 -0
  82. package/packages/server/dist/llm/ollamaClient.js.map +1 -0
  83. package/packages/server/dist/llm/ollamaQueue.d.ts +7 -0
  84. package/packages/server/dist/llm/ollamaQueue.d.ts.map +1 -0
  85. package/packages/server/dist/llm/ollamaQueue.js +28 -0
  86. package/packages/server/dist/llm/ollamaQueue.js.map +1 -0
  87. package/packages/server/dist/llm/promptBuilder.d.ts +8 -0
  88. package/packages/server/dist/llm/promptBuilder.d.ts.map +1 -0
  89. package/packages/server/dist/llm/promptBuilder.js +85 -0
  90. package/packages/server/dist/llm/promptBuilder.js.map +1 -0
  91. package/packages/server/dist/llm/promptSections.d.ts +64 -0
  92. package/packages/server/dist/llm/promptSections.d.ts.map +1 -0
  93. package/packages/server/dist/llm/promptSections.js +128 -0
  94. package/packages/server/dist/llm/promptSections.js.map +1 -0
  95. package/packages/server/dist/llm/providerModels.d.ts +14 -0
  96. package/packages/server/dist/llm/providerModels.d.ts.map +1 -0
  97. package/packages/server/dist/llm/providerModels.js +67 -0
  98. package/packages/server/dist/llm/providerModels.js.map +1 -0
  99. package/packages/server/dist/llm/suggester.d.ts +12 -0
  100. package/packages/server/dist/llm/suggester.d.ts.map +1 -0
  101. package/packages/server/dist/llm/suggester.js +263 -0
  102. package/packages/server/dist/llm/suggester.js.map +1 -0
  103. package/packages/server/dist/llm/summarizer.d.ts +53 -0
  104. package/packages/server/dist/llm/summarizer.d.ts.map +1 -0
  105. package/packages/server/dist/llm/summarizer.js +174 -0
  106. package/packages/server/dist/llm/summarizer.js.map +1 -0
  107. package/packages/server/dist/persistence.d.ts +42 -0
  108. package/packages/server/dist/persistence.d.ts.map +1 -0
  109. package/packages/server/dist/persistence.js +103 -0
  110. package/packages/server/dist/persistence.js.map +1 -0
  111. package/packages/server/dist/repoContext.d.ts +60 -0
  112. package/packages/server/dist/repoContext.d.ts.map +1 -0
  113. package/packages/server/dist/repoContext.js +197 -0
  114. package/packages/server/dist/repoContext.js.map +1 -0
  115. package/packages/server/dist/routes/blueprint.d.ts +7 -0
  116. package/packages/server/dist/routes/blueprint.d.ts.map +1 -0
  117. package/packages/server/dist/routes/blueprint.js +529 -0
  118. package/packages/server/dist/routes/blueprint.js.map +1 -0
  119. package/packages/server/dist/routes/config.d.ts +17 -0
  120. package/packages/server/dist/routes/config.d.ts.map +1 -0
  121. package/packages/server/dist/routes/config.js +282 -0
  122. package/packages/server/dist/routes/config.js.map +1 -0
  123. package/packages/server/dist/routes/lmstudio.d.ts +4 -0
  124. package/packages/server/dist/routes/lmstudio.d.ts.map +1 -0
  125. package/packages/server/dist/routes/lmstudio.js +67 -0
  126. package/packages/server/dist/routes/lmstudio.js.map +1 -0
  127. package/packages/server/dist/routes/notes.d.ts +5 -0
  128. package/packages/server/dist/routes/notes.d.ts.map +1 -0
  129. package/packages/server/dist/routes/notes.js +60 -0
  130. package/packages/server/dist/routes/notes.js.map +1 -0
  131. package/packages/server/dist/routes/ollama.d.ts +4 -0
  132. package/packages/server/dist/routes/ollama.d.ts.map +1 -0
  133. package/packages/server/dist/routes/ollama.js +207 -0
  134. package/packages/server/dist/routes/ollama.js.map +1 -0
  135. package/packages/server/dist/routes/prompt.d.ts +4 -0
  136. package/packages/server/dist/routes/prompt.d.ts.map +1 -0
  137. package/packages/server/dist/routes/prompt.js +75 -0
  138. package/packages/server/dist/routes/prompt.js.map +1 -0
  139. package/packages/server/dist/routes/refineNotes.d.ts +4 -0
  140. package/packages/server/dist/routes/refineNotes.d.ts.map +1 -0
  141. package/packages/server/dist/routes/refineNotes.js +87 -0
  142. package/packages/server/dist/routes/refineNotes.js.map +1 -0
  143. package/packages/server/dist/routes/repoContext.d.ts +3 -0
  144. package/packages/server/dist/routes/repoContext.d.ts.map +1 -0
  145. package/packages/server/dist/routes/repoContext.js +15 -0
  146. package/packages/server/dist/routes/repoContext.js.map +1 -0
  147. package/packages/server/dist/routes/sessions.d.ts +15 -0
  148. package/packages/server/dist/routes/sessions.d.ts.map +1 -0
  149. package/packages/server/dist/routes/sessions.js +420 -0
  150. package/packages/server/dist/routes/sessions.js.map +1 -0
  151. package/packages/server/dist/routes/summarize.d.ts +6 -0
  152. package/packages/server/dist/routes/summarize.d.ts.map +1 -0
  153. package/packages/server/dist/routes/summarize.js +85 -0
  154. package/packages/server/dist/routes/summarize.js.map +1 -0
  155. package/packages/server/dist/server.d.ts +2 -0
  156. package/packages/server/dist/server.d.ts.map +1 -0
  157. package/packages/server/dist/server.js +6 -0
  158. package/packages/server/dist/server.js.map +1 -0
  159. package/packages/server/dist/sessionManager.d.ts +41 -0
  160. package/packages/server/dist/sessionManager.d.ts.map +1 -0
  161. package/packages/server/dist/sessionManager.js +493 -0
  162. package/packages/server/dist/sessionManager.js.map +1 -0
  163. package/packages/server/dist/sessionScanner.d.ts +22 -0
  164. package/packages/server/dist/sessionScanner.d.ts.map +1 -0
  165. package/packages/server/dist/sessionScanner.js +165 -0
  166. package/packages/server/dist/sessionScanner.js.map +1 -0
  167. package/packages/server/dist/sessionTitle.d.ts +17 -0
  168. package/packages/server/dist/sessionTitle.d.ts.map +1 -0
  169. package/packages/server/dist/sessionTitle.js +321 -0
  170. package/packages/server/dist/sessionTitle.js.map +1 -0
  171. package/packages/server/dist/stateManager.d.ts +38 -0
  172. package/packages/server/dist/stateManager.d.ts.map +1 -0
  173. package/packages/server/dist/stateManager.js +83 -0
  174. package/packages/server/dist/stateManager.js.map +1 -0
  175. package/packages/server/dist/wsServer.d.ts +27 -0
  176. package/packages/server/dist/wsServer.d.ts.map +1 -0
  177. package/packages/server/dist/wsServer.js +144 -0
  178. package/packages/server/dist/wsServer.js.map +1 -0
  179. package/packages/shared/dist/index.d.ts +3 -0
  180. package/packages/shared/dist/index.d.ts.map +1 -0
  181. package/packages/shared/dist/index.js +3 -0
  182. package/packages/shared/dist/index.js.map +1 -0
  183. package/packages/shared/dist/llm/mambaDetect.d.ts +84 -0
  184. package/packages/shared/dist/llm/mambaDetect.d.ts.map +1 -0
  185. package/packages/shared/dist/llm/mambaDetect.js +205 -0
  186. package/packages/shared/dist/llm/mambaDetect.js.map +1 -0
  187. package/packages/shared/dist/types.d.ts +184 -0
  188. package/packages/shared/dist/types.d.ts.map +1 -0
  189. package/packages/shared/dist/types.js +2 -0
  190. package/packages/shared/dist/types.js.map +1 -0
  191. package/scripts/postbuild.js +70 -0
@@ -0,0 +1 @@
1
+ @font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2) format("woff2"),url(/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff) format("woff")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2) format("woff2"),url(/assets/space-grotesk-latin-600-normal-BflQw4A9.woff) format("woff")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2) format("woff2"),url(/assets/geist-mono-latin-400-normal-CoULgQGM.woff) format("woff")}:root{--surface: #131313;--on-surface: #F5F5F5;--outline-variant: #2A2A2A;--panel-label: #888888;--surface-container-lowest: #0e0e0e;--surface-container-high: #2a2a2a;--primary: #F5F5F5;--on-primary: #131313;--low-priority: #767676;--font-sans: "Space Grotesk", sans-serif;--font-mono: "Geist Mono", monospace;color-scheme:dark}:root.dark{--surface: #FFFFFF;--on-surface: #000000;--outline-variant: #E0E0E0;--panel-label: #666666;--surface-container-lowest: #F9F9F9;--surface-container-high: #F0F0F0;--primary: #000000;--on-primary: #FFFFFF;--low-priority: #999999;color-scheme:light}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background-color:var(--surface);color:var(--on-surface);height:100vh;overflow:hidden;-webkit-font-smoothing:antialiased}.heading-sm{font-family:var(--font-sans);font-size:.75rem;text-transform:uppercase;letter-spacing:.05rem;color:var(--panel-label)}.text-mono{font-family:var(--font-mono)}.text-body-md{font-size:.875rem;line-height:1.5}.text-sm{font-size:.75rem}.app-container{display:flex;flex-direction:column;height:100vh}.top-nav{height:60px;display:flex;justify-content:space-between;align-items:center;padding:0 24px;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.nav-title{font-family:var(--font-sans);font-weight:500;font-size:1.25rem;letter-spacing:-.02em;text-transform:uppercase}.app-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;flex:1;overflow:hidden}.panel{display:flex;flex-direction:column;position:relative;overflow-y:auto}.panel:nth-child(1){border-right:1px solid var(--outline-variant);border-bottom:1px solid var(--outline-variant)}.panel:nth-child(2){border-bottom:1px solid var(--outline-variant)}.panel:nth-child(3){border-right:1px solid var(--outline-variant)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--surface)}::-webkit-scrollbar-thumb{background:var(--outline-variant);border-radius:0}:focus-visible{outline:2px solid var(--outline-variant);outline-offset:2px}*:focus:not(:focus-visible){outline:none}textarea:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}.panel:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}button{all:unset;cursor:pointer;box-sizing:border-box}.btn-primary{background-color:var(--primary);color:var(--on-primary);padding:8px 16px;font-family:var(--font-sans);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;transition:opacity .2s}.btn-primary:active{opacity:.8}.btn-tertiary{font-family:var(--font-mono);font-size:.75rem;border:1px solid var(--outline-variant);padding:6px 12px;transition:background-color .2s}.btn-tertiary:hover:not(:disabled){background-color:var(--surface-container-high)}.btn-tertiary:disabled{opacity:.5;cursor:not-allowed}.btn-clear{color:var(--panel-label);opacity:.7;font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;padding:4px 8px;border:1px solid var(--outline-variant);background:transparent;cursor:pointer;transition:opacity .2s,background-color .2s}.btn-clear:hover:not(:disabled){opacity:1;background-color:var(--surface-container-high);color:#f44;border-color:#f44}.btn-regenerate{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;padding:4px 10px}.blueprint-right__generating-label{animation:pulse 1.5s ease-in-out infinite}.blueprint-right__mamba-notice{opacity:.7;padding:2px 6px;border:1px solid var(--outline-variant)}.dark-mode-toggle{display:flex;align-items:center;gap:8px}.dark-mode-label{font-family:var(--font-sans);font-size:.75rem;text-transform:uppercase;color:var(--panel-label)}.toggle-track{width:40px;height:22px;border:1px solid var(--outline-variant);background:var(--surface);position:relative;cursor:pointer;transition:background-color .2s}.toggle-thumb{position:absolute;top:1px;left:1px;width:18px;height:18px;background:var(--primary);transition:transform .2s cubic-bezier(.4,0,.2,1)}html.dark .toggle-thumb{transform:translate(18px)}.nav-icons{display:flex;align-items:center;gap:16px}.nav-icon-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:0;border:none;background:transparent;color:var(--panel-label);cursor:pointer;transition:color .2s,background-color .2s;padding:0}.nav-icon-btn:hover{color:var(--on-surface);background-color:var(--surface-container-high)}.memory-bar-track{width:100%;height:4px;background-color:var(--outline-variant);margin-top:8px;margin-bottom:12px;overflow:hidden}.memory-bar-fill{height:100%;background-color:var(--on-surface);transition:width .6s cubic-bezier(.4,0,.2,1)}.activity-log{font-family:var(--font-mono);font-size:.7rem;line-height:1.6;color:var(--panel-label);margin-top:auto;padding-top:12px;border-top:1px solid var(--outline-variant)}.activity-log-entry{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.activity-log-cursor{display:inline-block;width:6px;height:12px;background-color:var(--panel-label);animation:blink 1s step-end infinite;vertical-align:middle;margin-left:2px}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.animate-spin{animation:spin 1s linear infinite}.animate-pulse{animation:pulse 1.5s infinite ease-in-out}.panel-content{padding:24px;flex:1;display:flex;flex-direction:column;gap:0}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;min-height:44px;padding:6px 24px 14px;border-bottom:1px solid var(--outline-variant);margin-bottom:24px;flex-shrink:0}.panel-title{font-family:var(--font-mono);color:var(--panel-label);text-transform:uppercase;font-size:.75rem;letter-spacing:.05em;margin:0}.field-label{font-family:var(--font-mono);color:var(--panel-label);text-transform:uppercase;font-size:.75rem;letter-spacing:.05em}.connection-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000c;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;color:#f5f5f5;font-family:var(--font-sans)}.drag-overlay{position:absolute;top:0;right:0;bottom:0;left:0;border:2px dashed var(--primary);border-radius:0;pointer-events:none;display:flex;align-items:center;justify-content:center;background-color:#ffffff1a}.skeleton-line{background-color:var(--outline-variant)}.status-dot{width:6px;height:6px}.priority-filter-btn{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;padding:4px 10px;border:1px solid var(--outline-variant);border-radius:0;cursor:pointer;transition:all .2s}.priority-filter-btn--active{background:var(--on-surface);color:var(--surface)}.priority-filter-btn--inactive{background:transparent;color:var(--panel-label)}.badge{font-family:var(--font-sans);font-size:.65rem;text-transform:uppercase;padding:2px 6px;line-height:1}.badge--high{background:var(--on-surface);color:var(--surface);border:1px solid var(--on-surface)}.badge--medium{background:transparent;color:var(--on-surface);border:1px solid var(--on-surface)}.badge--low{background:var(--low-priority);color:var(--on-surface);border:1px solid var(--low-priority)}.task-card{border:1px solid var(--outline-variant);padding:16px;position:relative;background-color:var(--surface-container-high);cursor:grab}.task-card--conflict{margin-left:4px}.conflict-bar{position:absolute;left:-5px;top:-1px;bottom:-1px;width:4px;background-color:#fc0}.refresh-btn{background:transparent;border:none;width:16px;height:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--panel-label);padding:0}.refresh-btn:disabled{cursor:not-allowed;opacity:.5}.delete-btn{background:transparent;border:none;color:var(--panel-label);cursor:pointer;font-size:16px;padding:0 4px;line-height:1;opacity:.5}.delete-btn:hover{opacity:1}.prompt-card{border:1px solid var(--outline-variant);background-color:var(--surface-container-high);padding:16px;position:relative}.prompt-card h3{font-size:1rem;font-weight:500}.prompt-code-block{padding:16px;background-color:var(--surface);font-family:var(--font-sans);font-size:.75rem;line-height:1.5;color:var(--on-surface);border:1px solid var(--outline-variant)}.text-label-sm{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label);text-transform:uppercase}.file-tag{font-family:var(--font-mono);font-size:.75rem;border:1px solid var(--outline-variant);padding:2px 8px;color:var(--on-surface);background-color:var(--surface-container-high);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:100%}.notes-panel{padding:24px 0 24px 24px;flex:1;display:flex;flex-direction:column}.notes-panel-header{margin-right:24px}.notes-textarea{flex:1;border:none;resize:none;background-color:transparent;color:var(--on-surface);padding:16px 0 0;outline:none}.notes-textarea:focus-visible{outline:none}.notes-editor-wrapper{flex:1;position:relative;display:flex;flex-direction:column;overflow-y:auto;padding-right:24px}.notes-block-editor{flex:1;min-height:100%;padding:16px 0 0;outline:none;cursor:text}.notes-block-editor:focus-visible{outline:none}.notes-block-editor .notes-placeholder{color:var(--panel-label);font-family:var(--font-mono);font-size:.875rem;opacity:.5}.notes-rendered{flex:1;overflow-y:auto;padding:16px 0 0;cursor:text}.notes-rendered:focus-visible{outline:none}.notes-placeholder{color:var(--panel-label);font-family:var(--font-mono);font-size:.875rem;opacity:.5}.note-h1{font-family:var(--font-sans);font-weight:500;font-size:1.25rem;margin:16px 0 8px;color:var(--on-surface);letter-spacing:-.01em}.note-h2{font-family:var(--font-sans);font-weight:500;font-size:1.1rem;margin:14px 0 6px;color:var(--on-surface)}.note-h3{font-family:var(--font-sans);font-weight:500;font-size:1rem;margin:12px 0 4px;color:var(--on-surface)}.note-p{margin:0 0 8px;line-height:1.5;font-family:var(--font-mono);font-size:.875rem}.note-ul{display:flex;gap:8px;margin:0 0 4px;font-family:var(--font-mono);font-size:.875rem;line-height:1.5}.note-bullet{color:var(--panel-label);flex-shrink:0}.note-ol{display:flex;gap:8px;margin:0 0 4px;font-family:var(--font-mono);font-size:.875rem;line-height:1.5}.note-ol-marker{min-width:1.2em}.note-todo{display:flex;gap:8px;margin:0 0 4px;font-family:var(--font-mono);font-size:.875rem;line-height:1.5}.note-checkbox{color:var(--panel-label);flex-shrink:0;width:1em;text-align:center}.note-checkbox.checked{color:var(--on-surface)}.note-quote{border-left:2px solid var(--outline-variant);padding:4px 0 4px 12px;margin:4px 0;color:var(--panel-label);font-family:var(--font-mono);font-size:.875rem;line-height:1.5}.note-callout{background-color:var(--surface-container-high);border:1px solid var(--outline-variant);padding:8px 12px;margin:8px 0;font-family:var(--font-mono);font-size:.875rem;line-height:1.5;display:flex;gap:8px}.note-callout-marker{flex-shrink:0;color:var(--panel-label)}.note-code{background-color:var(--surface-container-lowest);border:1px solid var(--outline-variant);padding:12px;margin:8px 0;overflow-x:auto;font-family:var(--font-mono);font-size:.8rem;line-height:1.6}.note-code code{color:var(--on-surface)}.note-divider{border:none;border-top:1px solid var(--outline-variant);margin:12px 0}.note-blank{height:8px}.slash-menu-container{position:absolute;z-index:100}.slash-menu{background-color:var(--surface);border:1px solid var(--outline-variant);min-width:220px;max-height:240px;overflow-y:auto;padding:0}.slash-menu-item{display:flex;align-items:baseline;gap:8px;padding:6px 12px;cursor:pointer;border-bottom:1px solid var(--outline-variant);transition:background-color .1s}.slash-menu-item:last-child{border-bottom:none}.slash-menu-item.selected{background-color:var(--surface-container-high)}.slash-menu-key{font-family:var(--font-mono);font-size:.75rem;color:var(--on-surface);min-width:70px}.slash-menu-label{font-family:var(--font-sans);font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:var(--panel-label);min-width:60px}.slash-menu-desc{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label);opacity:.7}.refine-btn{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;padding:3px 8px}.refine-btn:disabled{opacity:.4;cursor:not-allowed}.refine-review-overlay{flex:1;display:flex;flex-direction:column;overflow:hidden}.refine-review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:12px;border-bottom:1px solid var(--outline-variant);margin-bottom:12px}.refine-review-title{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label)}.refine-review-actions{display:flex;gap:8px}.refine-review-body{flex:1;overflow-y:auto;padding:8px 0}.refine-review-pre{white-space:pre-wrap;word-break:break-word;font-size:.875rem;line-height:1.5;color:var(--on-surface)}.connection-overlay__title{font-size:1.5rem;margin-bottom:1rem;text-transform:uppercase;letter-spacing:.1em}.connection-overlay__subtitle{font-size:.875rem;color:var(--panel-label);margin-bottom:2rem}.connection-overlay__hint{font-size:.75rem;color:var(--panel-label)}.nav-page-buttons{display:flex;align-items:center;justify-content:center;gap:24px;flex:1}.nav-page-btn{font-family:var(--font-sans);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;padding:6px 16px;border:1px solid var(--outline-variant);background:transparent;color:var(--panel-label);cursor:pointer;transition:background-color .15s,color .15s}.nav-page-btn:hover,.nav-page-btn--active{background-color:var(--surface-container-high);color:var(--on-surface)}.blueprint-container{flex:1;overflow:hidden;display:flex;flex-direction:column}.blueprint-page{display:flex;flex-direction:column;height:100%;overflow:hidden}.blueprint-columns{flex:1;display:flex;overflow:hidden}.blueprint-left{flex:1;display:flex;flex-direction:column;position:relative;overflow-y:auto}.blueprint-divider{width:1px;background-color:var(--outline-variant);flex-shrink:0}.blueprint-right{flex:1;display:flex;flex-direction:column;overflow-y:auto}.blueprint-right__header{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.blueprint-right__actions{display:flex;align-items:center;gap:12px}.blueprint-right__error{color:#f44;font-family:var(--font-sans);font-size:.65rem;text-transform:uppercase}.blueprint-right__content{flex:1;padding:24px;overflow-y:auto;display:flex;flex-direction:column;gap:12px}.blueprint-right__empty,.blueprint-right__loading{flex:1;display:flex;align-items:center;justify-content:center}.blueprint-right__streaming{display:flex;flex-direction:column;gap:8px}.blueprint-right__streaming-indicator{padding:4px 0;border-bottom:1px solid var(--outline-variant)}.blueprint-right__streaming-text{font-family:var(--font-mono);font-size:.75rem;line-height:1.5;color:var(--panel-label);white-space:pre-wrap;word-break:break-word;margin:0;padding:0}.blueprint-right__tool-indicator{display:flex;align-items:center;gap:6px;padding:4px 8px;border:1px solid var(--outline-variant);background-color:var(--surface-container-lowest);margin-bottom:4px}.agentsmd-bar{border-bottom:1px solid var(--outline-variant);flex-shrink:0;background-color:var(--surface)}.agentsmd-bar--collapsed{display:flex;justify-content:space-between;align-items:center;padding:8px 24px;cursor:pointer}.agentsmd-bar__title{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label)}.agentsmd-bar__expand{color:var(--panel-label);font-size:.65rem}.agentsmd-bar__header{display:flex;justify-content:space-between;align-items:center;padding:8px 24px;border-bottom:1px solid var(--outline-variant)}.agentsmd-bar__actions{display:flex;align-items:center;gap:8px}.agentsmd-bar__status{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;color:var(--panel-label)}.agentsmd-bar__btn{font-size:.65rem;padding:3px 8px}.agentsmd-bar__collapse-btn{background:transparent;border:none;color:var(--panel-label);cursor:pointer;font-size:10px;padding:4px}.agentsmd-bar__content{padding:8px 24px;max-height:160px;overflow-y:auto}.agentsmd-bar__pre{font-family:var(--font-mono);font-size:.75rem;line-height:1.5;color:var(--on-surface);white-space:pre-wrap;word-break:break-word;margin:0}.agentsmd-bar__empty{font-family:var(--font-mono);font-size:.75rem;color:var(--panel-label);opacity:.5}.agentsmd-bar__editor{width:100%;min-height:100px;max-height:300px;padding:8px 24px;border:none;resize:vertical;background-color:var(--surface-container-lowest);color:var(--on-surface);font-family:var(--font-mono);font-size:.75rem;line-height:1.5;outline:none}.agentsmd-bar__editor:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}.agentsmd-bar__ai-input{display:flex;align-items:center;gap:8px;padding:8px 24px;border-top:1px solid var(--outline-variant)}.agentsmd-bar__ai-field{flex:1;border:1px solid var(--outline-variant);padding:4px 8px;font-family:var(--font-mono);font-size:.75rem;background-color:var(--surface);color:var(--on-surface);outline:none}.agentsmd-bar__ai-field:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}.spec-phase-card{border:1px solid var(--outline-variant);background-color:var(--surface-container-high);cursor:pointer;transition:background-color .15s}.spec-phase-card:hover{background-color:var(--surface-container-high)}.spec-phase-card--updating{opacity:.65;pointer-events:none}.spec-phase-card--fresh{border-color:var(--on-surface);transition:border-color .3s ease}.blueprint-right__update-indicator{padding:4px 0;border-bottom:1px solid var(--outline-variant)}.spec-phase-card__header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px}.spec-phase-card__title-row{display:flex;align-items:center;gap:12px}.spec-phase-card__number{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label);flex-shrink:0}.spec-phase-card__title{font-family:var(--font-sans);font-size:.875rem;font-weight:500;color:var(--on-surface)}.spec-phase-card__meta{display:flex;align-items:center;gap:12px}.spec-phase-card__status{font-family:var(--font-mono);font-size:.6rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label)}.spec-phase-card__tokens{font-family:var(--font-mono);font-size:.6rem;color:var(--panel-label)}.spec-phase-card__expand-icon{font-size:.5rem;color:var(--panel-label)}.spec-phase-card__body{padding:0 16px 16px;border-top:1px solid var(--outline-variant)}.spec-phase-card__section{margin-top:12px}.spec-phase-card__label{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label);display:block;margin-bottom:6px}.spec-phase-card__tags{display:flex;gap:6px;flex-wrap:wrap}.spec-phase-card__rationale{font-family:var(--font-mono);font-size:.8rem;line-height:1.5;color:var(--on-surface);margin:0}.spec-phase-card__prompt-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.spec-phase-card__tokens-detail{font-family:var(--font-mono);font-size:.6rem;color:var(--panel-label)}.spec-phase-card__prompt{background-color:var(--surface-container-lowest);border:1px solid var(--outline-variant);max-height:300px;overflow-y:auto}.spec-phase-card__prompt-pre{font-family:var(--font-mono);font-size:.7rem;line-height:1.5;color:var(--on-surface);white-space:pre-wrap;word-break:break-word;padding:12px;margin:0}.spec-phase-card__prompt-actions{display:flex;gap:8px;margin-top:8px}.spec-phase-card__action-btn{font-size:.6rem;padding:3px 8px}.clarification-popup{position:fixed;z-index:200;background-color:var(--surface);border:1px solid var(--outline-variant);min-width:300px;max-width:400px;max-height:60vh;overflow-y:auto;padding:12px 16px;box-shadow:none}.clarification-popup__type{font-family:var(--font-mono);font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}.clarification-popup__anchor{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label);margin-bottom:6px;font-style:italic}.clarification-popup__question{font-family:var(--font-sans);font-size:.8rem;line-height:1.4;color:var(--on-surface);margin-bottom:10px}.clarification-popup__options{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.clarification-popup__option-btn{font-size:.65rem;padding:4px 10px}.clarification-popup__assumption{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label);margin-bottom:10px;padding:6px 8px;border:1px solid var(--outline-variant);background-color:var(--surface-container-lowest)}.clarification-popup__input-row{display:flex;gap:8px;align-items:center}.clarification-popup__input{flex:1;border:1px solid var(--outline-variant);padding:4px 8px;font-family:var(--font-mono);font-size:.75rem;background-color:var(--surface);color:var(--on-surface);outline:none}.clarification-popup__input:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}.clarification-popup__submit-btn,.clarification-popup__skip-btn{font-size:.6rem;padding:3px 8px}.blueprint-left .notes-panel-header{display:none}.blueprint-left .notes-panel{padding:16px 24px}.blueprint-left__header{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.blueprint-column-header{min-height:48px;padding:0 24px}.blueprint-left__header.blueprint-column-header,.blueprint-right__header.blueprint-column-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.blueprint-right__subtitle-bar{display:flex;align-items:center;padding:4px 24px;border-bottom:1px solid var(--outline-variant);background-color:var(--surface-container-lowest);flex-shrink:0;min-height:24px}.blueprint-right__model-subtitle{font-family:var(--font-mono);font-size:.6rem;color:var(--panel-label);text-transform:none;letter-spacing:0}.model-drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:299}.model-drawer{position:fixed;top:0;right:0;bottom:0;width:320px;background-color:var(--surface);border-left:1px solid var(--outline-variant);z-index:300;display:flex;flex-direction:column;animation:model-drawer-slide-in .15s ease-out}@keyframes model-drawer-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.model-drawer__header{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.model-drawer__title{font-family:var(--font-sans);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface)}.model-drawer__close{background:transparent;border:none;color:var(--panel-label);cursor:pointer;font-size:14px;padding:4px;line-height:1}.model-drawer__close:hover{color:var(--on-surface)}.model-drawer__content{flex:1;padding:24px;display:flex;flex-direction:column;gap:24px;overflow-y:auto}.model-drawer__section{display:flex;flex-direction:column;gap:10px}.model-drawer__label{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label)}.model-drawer__providers{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.model-drawer__provider-btn{font-family:var(--font-mono);font-size:.7rem;padding:4px 12px;border:1px solid var(--outline-variant);background:transparent;color:var(--panel-label);cursor:pointer;transition:background-color .15s,color .15s}.model-drawer__provider-btn:hover,.model-drawer__provider-btn--active{background-color:var(--surface-container-high);color:var(--on-surface)}.model-drawer__ollama-hint{font-family:var(--font-mono);font-size:.6rem;color:var(--panel-label);opacity:.6;font-style:italic}.model-drawer__models{display:flex;flex-direction:column;gap:4px}.model-drawer__model-btn{font-family:var(--font-mono);font-size:.7rem;padding:6px 12px;border:1px solid var(--outline-variant);background:transparent;color:var(--panel-label);cursor:pointer;text-align:left;transition:background-color .15s,color .15s}.model-drawer__model-btn:hover{background-color:var(--surface-container-high);color:var(--on-surface)}.model-drawer__model-btn--active{background-color:var(--surface-container-high);color:var(--on-surface);border-color:var(--on-surface)}.model-drawer__toggle-row{display:flex;justify-content:space-between;align-items:center}.model-drawer__toggle{width:40px;height:22px;border:1px solid var(--outline-variant);background:var(--surface);position:relative;cursor:pointer;padding:0;transition:background-color .2s}.model-drawer__toggle--on{background-color:var(--surface-container-high)}.model-drawer__toggle-thumb{position:absolute;top:1px;left:1px;width:18px;height:18px;background:var(--primary);transition:transform .2s cubic-bezier(.4,0,.2,1)}.model-drawer__toggle--on .model-drawer__toggle-thumb{transform:translate(18px)}.model-drawer__field{display:flex;flex-direction:column;gap:6px}.model-drawer__field-label{font-family:var(--font-mono);font-size:.6rem;text-transform:uppercase;letter-spacing:.05em;color:var(--panel-label)}.model-drawer__input,.model-drawer__select{font-family:var(--font-mono);font-size:.75rem;color:var(--on-surface);background-color:var(--surface-container-lowest);border:1px solid var(--outline-variant);padding:6px 8px;outline:none;width:100%}.model-drawer__input:focus-visible,.model-drawer__select:focus-visible{outline:2px solid var(--outline-variant);outline-offset:-2px}.model-drawer__password-row{display:flex;gap:6px}.model-drawer__password-row .model-drawer__input{flex:1}.model-drawer__show-btn{font-size:.6rem;padding:4px 8px;white-space:nowrap}.model-drawer__hint{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label)}.model-drawer__ollama-missing{display:flex;flex-direction:column;gap:8px}.model-drawer__unsaved{display:flex;flex-direction:column;gap:8px;padding:12px 24px;border-bottom:1px solid var(--outline-variant);background-color:var(--surface-container-high)}.model-drawer__unsaved-text{font-family:var(--font-sans);font-size:.75rem;color:var(--on-surface)}.model-drawer__unsaved-actions{display:flex;gap:8px}.model-drawer__footer{margin-top:auto;padding-top:12px;border-top:1px solid var(--outline-variant)}.model-drawer__save-btn{width:100%;text-align:center}.model-drawer__save-btn:disabled{opacity:.4;cursor:not-allowed}.blueprint-annotations{border-top:1px solid var(--outline-variant);padding:8px 24px}.blueprint-annotation{display:flex;flex-direction:column;gap:2px;margin-bottom:6px}.blueprint-annotation__question{font-family:var(--font-mono);font-size:.65rem;color:var(--panel-label)}.blueprint-annotation__answer{font-family:var(--font-mono);font-size:.75rem;color:var(--on-surface);padding:2px 6px;border-left:2px solid var(--outline-variant)}.blueprint-annotation__input{width:100%;background-color:var(--surface-container-lowest);border:1px solid var(--outline-variant);color:var(--on-surface);font-family:var(--font-mono);font-size:.75rem;padding:4px 6px;outline:none;border-radius:0}.blueprint-responses{border-top:1px solid var(--outline-variant);flex-shrink:0;display:flex;flex-direction:column}.blueprint-responses--collapsed{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:8px 24px;cursor:pointer;flex-shrink:0}.blueprint-responses__header{display:flex;justify-content:space-between;align-items:center;padding:8px 24px;border-bottom:1px solid var(--outline-variant);flex-shrink:0}.blueprint-responses__header-actions{display:flex;align-items:center;gap:8px}.blueprint-responses__collapse-btn{background:transparent;border:none;color:var(--panel-label);cursor:pointer;font-size:10px;padding:4px}.blueprint-responses__arrow{color:var(--panel-label);font-size:.65rem}
@@ -0,0 +1,17 @@
1
+ var w={exports:{}},u={};/**
2
+ * @license React
3
+ * react.production.js
4
+ *
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var R=Symbol.for("react.transitional.element"),b=Symbol.for("react.portal"),G=Symbol.for("react.fragment"),z=Symbol.for("react.strict_mode"),q=Symbol.for("react.profiler"),K=Symbol.for("react.consumer"),B=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),X=Symbol.for("react.suspense"),Q=Symbol.for("react.memo"),L=Symbol.for("react.lazy"),Z=Symbol.for("react.activity"),h=Symbol.iterator;function J(e){return e===null||typeof e!="object"?null:(e=h&&e[h]||e["@@iterator"],typeof e=="function"?e:null)}var D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},$=Object.assign,j={};function E(e,t,r){this.props=e,this.context=t,this.refs=j,this.updater=r||D}E.prototype.isReactComponent={};E.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};E.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function M(){}M.prototype=E.prototype;function S(e,t,r){this.props=e,this.context=t,this.refs=j,this.updater=r||D}var O=S.prototype=new M;O.constructor=S;$(O,E.prototype);O.isPureReactComponent=!0;var P=Array.isArray;function T(){}var f={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function C(e,t,r){var n=r.ref;return{$$typeof:R,type:e,key:t,ref:n!==void 0?n:null,props:r}}function V(e,t){return C(e.type,t,e.props)}function A(e){return typeof e=="object"&&e!==null&&e.$$typeof===R}function F(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var H=/\/+/g;function m(e,t){return typeof e=="object"&&e!==null&&e.key!=null?F(""+e.key):t.toString(36)}function ee(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(T,T):(e.status="pending",e.then(function(t){e.status==="pending"&&(e.status="fulfilled",e.value=t)},function(t){e.status==="pending"&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function p(e,t,r,n,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(i){case"bigint":case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case R:case b:s=!0;break;case L:return s=e._init,p(s(e._payload),t,r,n,o)}}if(s)return o=o(e),s=n===""?"."+m(e,0):n,P(o)?(r="",s!=null&&(r=s.replace(H,"$&/")+"/"),p(o,t,r,"",function(x){return x})):o!=null&&(A(o)&&(o=V(o,r+(o.key==null||e&&e.key===o.key?"":(""+o.key).replace(H,"$&/")+"/")+s)),t.push(o)),1;s=0;var y=n===""?".":n+":";if(P(e))for(var l=0;l<e.length;l++)n=e[l],i=y+m(n,l),s+=p(n,t,r,i,o);else if(l=J(e),typeof l=="function")for(e=l.call(e),l=0;!(n=e.next()).done;)n=n.value,i=y+m(n,l++),s+=p(n,t,r,i,o);else if(i==="object"){if(typeof e.then=="function")return p(ee(e),t,r,n,o);throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return s}function v(e,t,r){if(e==null)return e;var n=[],o=0;return p(e,n,"","",function(i){return t.call(r,i,o++)}),n}function te(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var N=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},re={map:v,forEach:function(e,t,r){v(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return v(e,function(){t++}),t},toArray:function(e){return v(e,function(t){return t})||[]},only:function(e){if(!A(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};u.Activity=Z;u.Children=re;u.Component=E;u.Fragment=G;u.Profiler=q;u.PureComponent=S;u.StrictMode=z;u.Suspense=X;u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=f;u.__COMPILER_RUNTIME={__proto__:null,c:function(e){return f.H.useMemoCache(e)}};u.cache=function(e){return function(){return e.apply(null,arguments)}};u.cacheSignal=function(){return null};u.cloneElement=function(e,t,r){if(e==null)throw Error("The argument must be a React element, but you passed "+e+".");var n=$({},e.props),o=e.key;if(t!=null)for(i in t.key!==void 0&&(o=""+t.key),t)!I.call(t,i)||i==="key"||i==="__self"||i==="__source"||i==="ref"&&t.ref===void 0||(n[i]=t[i]);var i=arguments.length-2;if(i===1)n.children=r;else if(1<i){for(var s=Array(i),y=0;y<i;y++)s[y]=arguments[y+2];n.children=s}return C(e.type,o,n)};u.createContext=function(e){return e={$$typeof:B,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:K,_context:e},e};u.createElement=function(e,t,r){var n,o={},i=null;if(t!=null)for(n in t.key!==void 0&&(i=""+t.key),t)I.call(t,n)&&n!=="key"&&n!=="__self"&&n!=="__source"&&(o[n]=t[n]);var s=arguments.length-2;if(s===1)o.children=r;else if(1<s){for(var y=Array(s),l=0;l<s;l++)y[l]=arguments[l+2];o.children=y}if(e&&e.defaultProps)for(n in s=e.defaultProps,s)o[n]===void 0&&(o[n]=s[n]);return C(e,i,o)};u.createRef=function(){return{current:null}};u.forwardRef=function(e){return{$$typeof:W,render:e}};u.isValidElement=A;u.lazy=function(e){return{$$typeof:L,_payload:{_status:-1,_result:e},_init:te}};u.memo=function(e,t){return{$$typeof:Q,type:e,compare:t===void 0?null:t}};u.startTransition=function(e){var t=f.T,r={};f.T=r;try{var n=e(),o=f.S;o!==null&&o(r,n),typeof n=="object"&&n!==null&&typeof n.then=="function"&&n.then(T,N)}catch(i){N(i)}finally{t!==null&&r.types!==null&&(t.types=r.types),f.T=t}};u.unstable_useCacheRefresh=function(){return f.H.useCacheRefresh()};u.use=function(e){return f.H.use(e)};u.useActionState=function(e,t,r){return f.H.useActionState(e,t,r)};u.useCallback=function(e,t){return f.H.useCallback(e,t)};u.useContext=function(e){return f.H.useContext(e)};u.useDebugValue=function(){};u.useDeferredValue=function(e,t){return f.H.useDeferredValue(e,t)};u.useEffect=function(e,t){return f.H.useEffect(e,t)};u.useEffectEvent=function(e){return f.H.useEffectEvent(e)};u.useId=function(){return f.H.useId()};u.useImperativeHandle=function(e,t,r){return f.H.useImperativeHandle(e,t,r)};u.useInsertionEffect=function(e,t){return f.H.useInsertionEffect(e,t)};u.useLayoutEffect=function(e,t){return f.H.useLayoutEffect(e,t)};u.useMemo=function(e,t){return f.H.useMemo(e,t)};u.useOptimistic=function(e,t){return f.H.useOptimistic(e,t)};u.useReducer=function(e,t,r){return f.H.useReducer(e,t,r)};u.useRef=function(e){return f.H.useRef(e)};u.useState=function(e){return f.H.useState(e)};u.useSyncExternalStore=function(e,t,r){return f.H.useSyncExternalStore(e,t,r)};u.useTransition=function(){return f.H.useTransition()};u.version="19.2.4";w.exports=u;var ne=w.exports,U={exports:{}},a={};/**
10
+ * @license React
11
+ * react-dom.production.js
12
+ *
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var ue=ne;function Y(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var r=2;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function _(){}var c={d:{f:_,r:function(){throw Error(Y(522))},D:_,C:_,L:_,m:_,X:_,S:_,M:_},p:0,findDOMNode:null},oe=Symbol.for("react.portal");function ie(e,t,r){var n=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:oe,key:n==null?null:""+n,children:e,containerInfo:t,implementation:r}}var g=ue.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(e,t){if(e==="font")return"";if(typeof t=="string")return t==="use-credentials"?t:""}a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=c;a.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(Y(299));return ie(e,t,null,r)};a.flushSync=function(e){var t=g.T,r=c.p;try{if(g.T=null,c.p=2,e)return e()}finally{g.T=t,c.p=r,c.d.f()}};a.preconnect=function(e,t){typeof e=="string"&&(t?(t=t.crossOrigin,t=typeof t=="string"?t==="use-credentials"?t:"":void 0):t=null,c.d.C(e,t))};a.prefetchDNS=function(e){typeof e=="string"&&c.d.D(e)};a.preinit=function(e,t){if(typeof e=="string"&&t&&typeof t.as=="string"){var r=t.as,n=d(r,t.crossOrigin),o=typeof t.integrity=="string"?t.integrity:void 0,i=typeof t.fetchPriority=="string"?t.fetchPriority:void 0;r==="style"?c.d.S(e,typeof t.precedence=="string"?t.precedence:void 0,{crossOrigin:n,integrity:o,fetchPriority:i}):r==="script"&&c.d.X(e,{crossOrigin:n,integrity:o,fetchPriority:i,nonce:typeof t.nonce=="string"?t.nonce:void 0})}};a.preinitModule=function(e,t){if(typeof e=="string")if(typeof t=="object"&&t!==null){if(t.as==null||t.as==="script"){var r=d(t.as,t.crossOrigin);c.d.M(e,{crossOrigin:r,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0})}}else t==null&&c.d.M(e)};a.preload=function(e,t){if(typeof e=="string"&&typeof t=="object"&&t!==null&&typeof t.as=="string"){var r=t.as,n=d(r,t.crossOrigin);c.d.L(e,r,{crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0,type:typeof t.type=="string"?t.type:void 0,fetchPriority:typeof t.fetchPriority=="string"?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy=="string"?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet=="string"?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes=="string"?t.imageSizes:void 0,media:typeof t.media=="string"?t.media:void 0})}};a.preloadModule=function(e,t){if(typeof e=="string")if(t){var r=d(t.as,t.crossOrigin);c.d.m(e,{as:typeof t.as=="string"&&t.as!=="script"?t.as:void 0,crossOrigin:r,integrity:typeof t.integrity=="string"?t.integrity:void 0})}else c.d.m(e)};a.requestFormReset=function(e){c.d.r(e)};a.unstable_batchedUpdates=function(e,t){return e(t)};a.useFormState=function(e,t,r){return g.H.useFormState(e,t,r)};a.useFormStatus=function(){return g.H.useHostTransitionStatus()};a.version="19.2.4";function k(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(k)}catch(e){console.error(e)}}k(),U.exports=a;var se=U.exports;export{se as a,ne as r};
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Noter</title>
7
+ <script type="module" crossorigin src="/assets/index-CBiNAMaA.js"></script>
8
+ <link rel="modulepreload" crossorigin href="/assets/vendor-react-DHeZC_T5.js">
9
+ <link rel="stylesheet" crossorigin href="/assets/index-u7i5Fle2.css">
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Claude Code adapter — watches Claude Code transcript files and ingests
3
+ * events into the Noter pipeline automatically (no MCP tool calls needed).
4
+ *
5
+ * Claude Code writes transcripts to ~/.claude/transcripts/*.jsonl with events:
6
+ * - {"type":"user",...} → ignored (or mapped to message if needed)
7
+ * - {"type":"tool_use",...} → tool.before
8
+ * - {"type":"tool_result",...} → tool.after
9
+ * - {"type":"assistant",...} → message (assistant) + thinking
10
+ *
11
+ * This adapter watches the transcripts directory, parses new lines as they
12
+ * appear, and pushes normalized AgentEvents through the pipeline.
13
+ *
14
+ * When ACTIVE_SOURCE includes 'claude-code' or 'both', this adapter is
15
+ * initialized in createApp().
16
+ */
17
+ import type { AppConfig } from '../config.js';
18
+ import type { EventStore } from '../eventStore.js';
19
+ import type { WsServerManager } from '../wsServer.js';
20
+ import type { Summarizer } from '../llm/summarizer.js';
21
+ export interface ClaudeAdapter {
22
+ start: () => Promise<void>;
23
+ stop: () => Promise<void>;
24
+ isRunning: () => boolean;
25
+ }
26
+ export interface ClaudeAdapterDeps {
27
+ config: AppConfig;
28
+ eventStore: EventStore;
29
+ ws: WsServerManager;
30
+ summarizer: Summarizer;
31
+ watchFile?: string;
32
+ }
33
+ export declare function createClaudeAdapter(deps: ClaudeAdapterDeps): ClaudeAdapter;
34
+ //# sourceMappingURL=claudeAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claudeAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,eAAe,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CA2L1E"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Claude Code adapter — watches Claude Code transcript files and ingests
3
+ * events into the Noter pipeline automatically (no MCP tool calls needed).
4
+ *
5
+ * Claude Code writes transcripts to ~/.claude/transcripts/*.jsonl with events:
6
+ * - {"type":"user",...} → ignored (or mapped to message if needed)
7
+ * - {"type":"tool_use",...} → tool.before
8
+ * - {"type":"tool_result",...} → tool.after
9
+ * - {"type":"assistant",...} → message (assistant) + thinking
10
+ *
11
+ * This adapter watches the transcripts directory, parses new lines as they
12
+ * appear, and pushes normalized AgentEvents through the pipeline.
13
+ *
14
+ * When ACTIVE_SOURCE includes 'claude-code' or 'both', this adapter is
15
+ * initialized in createApp().
16
+ */
17
+ import { watch } from 'fs';
18
+ import { createReadStream, existsSync, statSync, readdirSync } from 'fs';
19
+ import { createInterface } from 'readline';
20
+ import { join } from 'path';
21
+ import { resolveHomePath, waitForDir, parseTimestamp } from './pathUtils.js';
22
+ const TRANSCRIPTS_DIR = resolveHomePath('.claude', 'transcripts');
23
+ const POLL_INTERVAL_MS = 1000;
24
+ function normalizeTranscriptEvent(raw) {
25
+ const timestamp = parseTimestamp(raw.timestamp);
26
+ switch (raw.type) {
27
+ case 'tool_use': {
28
+ const toolName = raw.tool_name || 'unknown';
29
+ return {
30
+ id: `claude-tool-use-${timestamp}`,
31
+ source: 'claude-code',
32
+ type: 'tool.before',
33
+ tool: toolName,
34
+ args: raw.tool_input || {},
35
+ timestamp,
36
+ };
37
+ }
38
+ case 'tool_result': {
39
+ const toolName = raw.tool_name || 'unknown';
40
+ const output = raw.tool_output;
41
+ return {
42
+ id: `claude-tool-result-${timestamp}`,
43
+ source: 'claude-code',
44
+ type: 'tool.after',
45
+ tool: toolName,
46
+ output: typeof output === 'string' ? output : JSON.stringify(output),
47
+ timestamp,
48
+ };
49
+ }
50
+ case 'assistant': {
51
+ // Claude Code transcripts may contain structured content with thinking blocks.
52
+ // Content can be a string (plain text) or an array of content blocks.
53
+ const rawContent = raw.content;
54
+ const events = [];
55
+ if (typeof rawContent === 'string') {
56
+ // Check for thinking field (extended thinking from Claude)
57
+ const thinking = raw.thinking;
58
+ if (thinking) {
59
+ events.push({
60
+ id: `claude-thinking-${timestamp}`,
61
+ source: 'claude-code',
62
+ type: 'thinking',
63
+ thinking,
64
+ timestamp,
65
+ });
66
+ }
67
+ events.push({
68
+ id: `claude-assistant-${timestamp}`,
69
+ source: 'claude-code',
70
+ type: 'message',
71
+ text: rawContent,
72
+ sender: 'assistant',
73
+ timestamp,
74
+ });
75
+ }
76
+ else if (Array.isArray(rawContent)) {
77
+ // Structured content: extract thinking and text blocks
78
+ const textParts = [];
79
+ for (const block of rawContent) {
80
+ if (block && typeof block === 'object') {
81
+ const b = block;
82
+ if (b.type === 'thinking' && typeof b.thinking === 'string') {
83
+ events.push({
84
+ id: `claude-thinking-${timestamp}-${events.length}`,
85
+ source: 'claude-code',
86
+ type: 'thinking',
87
+ thinking: b.thinking,
88
+ timestamp,
89
+ });
90
+ }
91
+ else if (b.type === 'text' && typeof b.text === 'string') {
92
+ textParts.push(b.text);
93
+ }
94
+ }
95
+ }
96
+ events.push({
97
+ id: `claude-assistant-${timestamp}`,
98
+ source: 'claude-code',
99
+ type: 'message',
100
+ text: textParts.join('\n') || undefined,
101
+ sender: 'assistant',
102
+ timestamp,
103
+ });
104
+ }
105
+ // Return single event or array
106
+ if (events.length === 0)
107
+ return null;
108
+ if (events.length === 1)
109
+ return events[0];
110
+ return events;
111
+ }
112
+ default:
113
+ return null;
114
+ }
115
+ }
116
+ export function createClaudeAdapter(deps) {
117
+ const { eventStore, ws, summarizer, watchFile } = deps;
118
+ let started = false;
119
+ let dirWatcher = null;
120
+ let pollTimer = null;
121
+ const fileStates = new Map();
122
+ let handleSignal = null;
123
+ function pushEvent(event) {
124
+ eventStore.push(event);
125
+ ws.broadcast({ type: 'event', payload: event });
126
+ summarizer.handleEvent(event);
127
+ }
128
+ const lineBuffers = new Map();
129
+ function doStop() {
130
+ started = false;
131
+ if (handleSignal) {
132
+ process.off('SIGINT', handleSignal);
133
+ process.off('SIGTERM', handleSignal);
134
+ handleSignal = null;
135
+ }
136
+ if (dirWatcher) {
137
+ dirWatcher.close();
138
+ dirWatcher = null;
139
+ }
140
+ if (pollTimer) {
141
+ clearInterval(pollTimer);
142
+ pollTimer = null;
143
+ }
144
+ fileStates.clear();
145
+ lineBuffers.clear();
146
+ }
147
+ function processFile(filePath) {
148
+ const state = fileStates.get(filePath);
149
+ if (!state || state.isProcessing || !existsSync(filePath)) {
150
+ return;
151
+ }
152
+ state.isProcessing = true;
153
+ try {
154
+ const stats = statSync(filePath);
155
+ const currentSize = stats.size;
156
+ if (currentSize <= state.lastSize) {
157
+ state.isProcessing = false;
158
+ return;
159
+ }
160
+ const stream = createReadStream(filePath, {
161
+ start: state.lastSize,
162
+ end: currentSize - 1, // Fix: prevent reading past currentSize and corrupting incremental state
163
+ encoding: 'utf-8',
164
+ });
165
+ stream.on('error', (err) => {
166
+ console.error('[ClaudeAdapter] Stream error:', err);
167
+ state.isProcessing = false;
168
+ });
169
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
170
+ let buffer = lineBuffers.get(filePath) || '';
171
+ rl.on('line', (line) => {
172
+ buffer += line;
173
+ const trimmed = buffer.trim();
174
+ if (!trimmed) {
175
+ buffer = '';
176
+ return;
177
+ }
178
+ try {
179
+ const parsed = JSON.parse(trimmed);
180
+ buffer = '';
181
+ const result = normalizeTranscriptEvent(parsed);
182
+ if (result) {
183
+ const events = Array.isArray(result) ? result : [result];
184
+ for (const event of events) {
185
+ pushEvent(event);
186
+ }
187
+ }
188
+ }
189
+ catch {
190
+ // Incomplete JSON — keep buffering
191
+ }
192
+ });
193
+ rl.on('close', () => {
194
+ if (buffer.trim()) {
195
+ lineBuffers.set(filePath, buffer);
196
+ }
197
+ else {
198
+ lineBuffers.delete(filePath);
199
+ }
200
+ state.lastSize = currentSize;
201
+ state.isProcessing = false;
202
+ });
203
+ rl.on('error', (err) => {
204
+ console.error('[ClaudeAdapter] Readline error:', err);
205
+ state.isProcessing = false;
206
+ });
207
+ }
208
+ catch (err) {
209
+ console.error('[ClaudeAdapter] Process error:', err);
210
+ state.isProcessing = false;
211
+ }
212
+ }
213
+ function scanFiles() {
214
+ if (watchFile) {
215
+ if (!fileStates.has(watchFile) && existsSync(watchFile)) {
216
+ const size = statSync(watchFile).size;
217
+ fileStates.set(watchFile, { lastSize: size, isProcessing: false });
218
+ }
219
+ return;
220
+ }
221
+ if (!existsSync(TRANSCRIPTS_DIR)) {
222
+ return;
223
+ }
224
+ try {
225
+ const files = readdirSync(TRANSCRIPTS_DIR)
226
+ .filter((f) => f.endsWith('.jsonl'))
227
+ .map((f) => join(TRANSCRIPTS_DIR, f));
228
+ for (const filePath of files) {
229
+ if (!fileStates.has(filePath)) {
230
+ const size = existsSync(filePath) ? statSync(filePath).size : 0;
231
+ fileStates.set(filePath, { lastSize: size, isProcessing: false });
232
+ }
233
+ }
234
+ }
235
+ catch (err) {
236
+ console.error('[ClaudeAdapter] Scan error:', err);
237
+ }
238
+ }
239
+ function pollAllFiles() {
240
+ for (const filePath of fileStates.keys()) {
241
+ processFile(filePath);
242
+ }
243
+ }
244
+ return {
245
+ start: async () => {
246
+ started = true;
247
+ try {
248
+ await waitForDir(TRANSCRIPTS_DIR, { maxRetries: 10, baseDelayMs: 500 });
249
+ console.error(`[ClaudeAdapter] Transcripts directory ready: ${TRANSCRIPTS_DIR}`);
250
+ }
251
+ catch {
252
+ console.error(`[ClaudeAdapter] Transcripts directory not found: ${TRANSCRIPTS_DIR}`);
253
+ }
254
+ scanFiles();
255
+ if (!watchFile && existsSync(TRANSCRIPTS_DIR)) {
256
+ dirWatcher = watch(TRANSCRIPTS_DIR, (eventType, filename) => {
257
+ if (eventType === 'rename' && filename?.endsWith('.jsonl')) {
258
+ const filePath = join(TRANSCRIPTS_DIR, filename);
259
+ if (!fileStates.has(filePath) && existsSync(filePath)) {
260
+ const size = statSync(filePath).size;
261
+ fileStates.set(filePath, { lastSize: size, isProcessing: false });
262
+ }
263
+ }
264
+ });
265
+ }
266
+ pollTimer = setInterval(() => {
267
+ scanFiles();
268
+ pollAllFiles();
269
+ }, POLL_INTERVAL_MS);
270
+ handleSignal = () => { doStop(); };
271
+ process.on('SIGINT', handleSignal);
272
+ process.on('SIGTERM', handleSignal);
273
+ console.error('[ClaudeAdapter] Transcript watcher active');
274
+ },
275
+ stop: async () => {
276
+ doStop();
277
+ },
278
+ isRunning: () => started,
279
+ };
280
+ }
281
+ //# sourceMappingURL=claudeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeAdapter.js","sourceRoot":"","sources":["../../src/adapters/claudeAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * OpenAI Codex CLI adapter — watches Codex native rollout JSONL files and ingests
3
+ * events into the Noter pipeline automatically (no MCP tool calls needed).
4
+ *
5
+ * Codex writes per-session rollouts to:
6
+ * ~/.codex/sessions/YYYY/MM/DD/rollout-<timestamp>-<uuid>.jsonl
7
+ *
8
+ * Each line is a JSON object with a `timestamp` field and one of the following
9
+ * rollout item variants (serialized via serde with internal tagging):
10
+ * - `SessionMeta` — session metadata (skipped for events)
11
+ * - `ResponseItem` — assistant response items (message, tool_call, tool_result)
12
+ * - `EventMsg` — runtime events (command start/end, tool calls, etc.)
13
+ * - `TurnContext` — turn context changes (skipped)
14
+ * - `Compacted` — context compaction (skipped)
15
+ * - `thinking` — extended thinking from the model (maps to 'thinking' event type)
16
+ *
17
+ * This adapter watches the sessions directory recursively, discovers new rollout
18
+ * files, tails them for new lines, and pushes normalized AgentEvents through the
19
+ * eventStore → summarizer → WS broadcast pipeline.
20
+ */
21
+ import type { AppConfig } from '../config.js';
22
+ import type { EventStore } from '../eventStore.js';
23
+ import type { WsServerManager } from '../wsServer.js';
24
+ import type { Summarizer } from '../llm/summarizer.js';
25
+ export interface CodexAdapter {
26
+ start: () => Promise<void>;
27
+ stop: () => Promise<void>;
28
+ isRunning: () => boolean;
29
+ }
30
+ export interface CodexAdapterDeps {
31
+ config: AppConfig;
32
+ eventStore: EventStore;
33
+ ws: WsServerManager;
34
+ summarizer: Summarizer;
35
+ sessionDir?: string;
36
+ watchFile?: string;
37
+ }
38
+ export declare function createCodexAdapter(deps: CodexAdapterDeps): CodexAdapter;
39
+ //# sourceMappingURL=codexAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/codexAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,eAAe,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwKD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CA+LvE"}