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,42 @@
1
+ import type { HumanNotes } from '../../shared/dist/index.js';
2
+ export interface PersistedSettings {
3
+ activeSource?: string;
4
+ llmProvider?: string;
5
+ ollamaModel?: string;
6
+ genericLogPath?: string;
7
+ context7ApiKey?: string;
8
+ exaApiKey?: string;
9
+ lmStudioBaseUrl?: string;
10
+ lmStudioModel?: string;
11
+ customProviderName?: string;
12
+ customProviderBaseUrl?: string;
13
+ customProviderApiKey?: string;
14
+ customProviderModel?: string;
15
+ }
16
+ export interface BlueprintPersistedState {
17
+ phases: import('@noter/shared').SpecPhase[];
18
+ clarifications: import('@noter/shared').ClarificationQuestion[];
19
+ annotations: Record<string, string>;
20
+ updatedAt: number;
21
+ }
22
+ export interface PersistedState {
23
+ notes: HumanNotes | null;
24
+ settings: PersistedSettings;
25
+ deletedTaskIds: string[];
26
+ pinnedTaskIds: string[];
27
+ blueprint: BlueprintPersistedState | null;
28
+ suggestions: import('@noter/shared').TaskSuggestion[];
29
+ }
30
+ export declare function loadNotes(cwd?: string): HumanNotes | null;
31
+ export declare function saveNotes(notes: HumanNotes, cwd?: string): void;
32
+ export declare function loadSettings(cwd?: string): PersistedSettings;
33
+ export declare function saveSettings(settings: PersistedSettings, cwd?: string): void;
34
+ export declare function loadDeletedTaskIds(cwd?: string): string[];
35
+ export declare function saveDeletedTaskIds(ids: string[], cwd?: string): void;
36
+ export declare function loadPinnedTaskIds(cwd?: string): string[];
37
+ export declare function savePinnedTaskIds(ids: string[], cwd?: string): void;
38
+ export declare function loadSuggestions(cwd?: string): import('@noter/shared').TaskSuggestion[];
39
+ export declare function saveSuggestions(suggestions: import('@noter/shared').TaskSuggestion[], cwd?: string): void;
40
+ export declare function loadBlueprint(cwd?: string): BlueprintPersistedState | null;
41
+ export declare function saveBlueprint(blueprint: BlueprintPersistedState, cwd?: string): void;
42
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,eAAe,EAAE,SAAS,EAAE,CAAC;IAC5C,cAAc,EAAE,OAAO,eAAe,EAAE,qBAAqB,EAAE,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1C,WAAW,EAAE,OAAO,eAAe,EAAE,cAAc,EAAE,CAAC;CACvD;AAkDD,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEzD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAI/D;AAID,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE5D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAI5E;AAID,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIpE;AAID,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAInE;AAID,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,eAAe,EAAE,cAAc,EAAE,CAEtF;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,OAAO,eAAe,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzG;AAID,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAE1E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,uBAAuB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIpF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Durable persistence for noter state (notes, settings, deleted suggestions).
3
+ * Writes JSON files to a `.noter/` directory in the repo root or CWD fallback.
4
+ * All I/O is synchronous on writes (rare, user-triggered) and async-safe on reads (startup).
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ const DIR_NAME = '.noter';
9
+ const STATE_FILE = 'state.json';
10
+ function getStateDir(cwd) {
11
+ const base = cwd || process.cwd();
12
+ return join(base, DIR_NAME);
13
+ }
14
+ function getStatePath(cwd) {
15
+ return join(getStateDir(cwd), STATE_FILE);
16
+ }
17
+ function ensureDir(cwd) {
18
+ const dir = getStateDir(cwd);
19
+ if (!existsSync(dir)) {
20
+ mkdirSync(dir, { recursive: true });
21
+ }
22
+ }
23
+ function readState(cwd) {
24
+ const path = getStatePath(cwd);
25
+ if (!existsSync(path)) {
26
+ return { notes: null, settings: {}, deletedTaskIds: [], pinnedTaskIds: [], blueprint: null, suggestions: [] };
27
+ }
28
+ try {
29
+ const raw = readFileSync(path, 'utf-8');
30
+ const parsed = JSON.parse(raw);
31
+ return {
32
+ notes: parsed.notes ?? null,
33
+ settings: parsed.settings ?? {},
34
+ deletedTaskIds: parsed.deletedTaskIds ?? [],
35
+ pinnedTaskIds: parsed.pinnedTaskIds ?? [],
36
+ blueprint: parsed.blueprint ?? null,
37
+ suggestions: parsed.suggestions ?? [],
38
+ };
39
+ }
40
+ catch {
41
+ return { notes: null, settings: {}, deletedTaskIds: [], pinnedTaskIds: [], blueprint: null, suggestions: [] };
42
+ }
43
+ }
44
+ function writeState(state, cwd) {
45
+ ensureDir(cwd);
46
+ const path = getStatePath(cwd);
47
+ writeFileSync(path, JSON.stringify(state, null, 2), 'utf-8');
48
+ }
49
+ // --- Notes ---
50
+ export function loadNotes(cwd) {
51
+ return readState(cwd).notes;
52
+ }
53
+ export function saveNotes(notes, cwd) {
54
+ const state = readState(cwd);
55
+ state.notes = notes;
56
+ writeState(state, cwd);
57
+ }
58
+ // --- Settings ---
59
+ export function loadSettings(cwd) {
60
+ return readState(cwd).settings;
61
+ }
62
+ export function saveSettings(settings, cwd) {
63
+ const state = readState(cwd);
64
+ state.settings = settings;
65
+ writeState(state, cwd);
66
+ }
67
+ // --- Deleted suggestion IDs ---
68
+ export function loadDeletedTaskIds(cwd) {
69
+ return readState(cwd).deletedTaskIds;
70
+ }
71
+ export function saveDeletedTaskIds(ids, cwd) {
72
+ const state = readState(cwd);
73
+ state.deletedTaskIds = ids;
74
+ writeState(state, cwd);
75
+ }
76
+ // --- Pinned task IDs ---
77
+ export function loadPinnedTaskIds(cwd) {
78
+ return readState(cwd).pinnedTaskIds;
79
+ }
80
+ export function savePinnedTaskIds(ids, cwd) {
81
+ const state = readState(cwd);
82
+ state.pinnedTaskIds = ids;
83
+ writeState(state, cwd);
84
+ }
85
+ // --- Suggestions ---
86
+ export function loadSuggestions(cwd) {
87
+ return readState(cwd).suggestions;
88
+ }
89
+ export function saveSuggestions(suggestions, cwd) {
90
+ const state = readState(cwd);
91
+ state.suggestions = suggestions;
92
+ writeState(state, cwd);
93
+ }
94
+ // --- Blueprint state ---
95
+ export function loadBlueprint(cwd) {
96
+ return readState(cwd).blueprint;
97
+ }
98
+ export function saveBlueprint(blueprint, cwd) {
99
+ const state = readState(cwd);
100
+ state.blueprint = blueprint;
101
+ writeState(state, cwd);
102
+ }
103
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Repository context — detects git root, loads repo-level instructions,
3
+ * and matches active harness sessions by repository path.
4
+ *
5
+ * Used at CLI startup to make Noter repo-aware without requiring
6
+ * any manual configuration from the user.
7
+ */
8
+ export interface RepoContext {
9
+ /** Current working directory where `noter` was launched */
10
+ cwd: string;
11
+ /** Resolved git repository root, or null if not in a git repo */
12
+ repoRoot: string | null;
13
+ /** Contents of AGENTS.md (preferred) or AGENT.md from repo root, or null */
14
+ repoInstructions: string | null;
15
+ /** Which instructions file was loaded, for logging */
16
+ instructionsFile: string | null;
17
+ /** Auto-attached session info for this repo, if found */
18
+ autoAttachedSession: AutoAttachedSession | null;
19
+ }
20
+ export interface AutoAttachedSession {
21
+ harness: string;
22
+ sessionId: string;
23
+ sessionPath: string;
24
+ repoPath: string;
25
+ }
26
+ /**
27
+ * Walk up from `startDir` looking for a `.git` directory or file.
28
+ * Returns the repo root path, or null if not inside a git repository.
29
+ */
30
+ export declare function findGitRoot(startDir: string): string | null;
31
+ /**
32
+ * Load AGENTS.md or AGENT.md from the repo root.
33
+ * AGENTS.md takes precedence if both exist.
34
+ */
35
+ export declare function loadRepoInstructions(repoRoot: string): {
36
+ content: string | null;
37
+ file: string | null;
38
+ };
39
+ /**
40
+ * Try to find an active harness session that matches the given repo root.
41
+ *
42
+ * Matching strategies (by harness):
43
+ * - **Pi**: sessions dir is `~/.pi/agent/sessions/<escaped-workspace-dir>/`
44
+ * - **Factory Droid**: sessions dir is `~/.factory/sessions/<escaped-cwd>/`
45
+ * - **Claude Code**: no repo-path in directory structure — skip
46
+ * - **Codex**: no repo-path in directory structure — skip
47
+ *
48
+ * If multiple matching sessions exist, returns the most recently modified one.
49
+ */
50
+ export declare function findMatchingSession(repoRoot: string): AutoAttachedSession | null;
51
+ /**
52
+ * Resolve full repository context at startup.
53
+ * Non-blocking: if anything fails, returns partial context with nulls.
54
+ */
55
+ export declare function resolveRepoContext(cwd: string): RepoContext;
56
+ /**
57
+ * Format startup log messages for repo context.
58
+ */
59
+ export declare function formatStartupLog(ctx: RepoContext): string[];
60
+ //# sourceMappingURL=repoContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoContext.d.ts","sourceRoot":"","sources":["../src/repoContext.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,yDAAyD;IACzD,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B3D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAuBtG;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAUhF;AA2DD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAqB3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,EAAE,CAqB3D"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Repository context — detects git root, loads repo-level instructions,
3
+ * and matches active harness sessions by repository path.
4
+ *
5
+ * Used at CLI startup to make Noter repo-aware without requiring
6
+ * any manual configuration from the user.
7
+ */
8
+ import { existsSync, readFileSync, statSync, readdirSync } from 'fs';
9
+ import { join, basename, sep } from 'path';
10
+ import { homedir } from 'os';
11
+ /**
12
+ * Walk up from `startDir` looking for a `.git` directory or file.
13
+ * Returns the repo root path, or null if not inside a git repository.
14
+ */
15
+ export function findGitRoot(startDir) {
16
+ let dir = startDir;
17
+ const root = sep === '/' ? '/' : `${String.fromCharCode(dir.charCodeAt(0) | 0x20)}:\\`;
18
+ while (true) {
19
+ const gitPath = join(dir, '.git');
20
+ if (existsSync(gitPath)) {
21
+ try {
22
+ const st = statSync(gitPath);
23
+ // .git can be a directory (normal repo) or a file (git worktree)
24
+ if (st.isDirectory() || st.isFile()) {
25
+ return dir;
26
+ }
27
+ }
28
+ catch {
29
+ // Permission error — skip
30
+ }
31
+ }
32
+ if (dir === root)
33
+ break;
34
+ const parent = join(dir, '..');
35
+ if (parent === dir)
36
+ break; // filesystem root
37
+ dir = parent;
38
+ }
39
+ return null;
40
+ }
41
+ /**
42
+ * Load AGENTS.md or AGENT.md from the repo root.
43
+ * AGENTS.md takes precedence if both exist.
44
+ */
45
+ export function loadRepoInstructions(repoRoot) {
46
+ const agentsMd = join(repoRoot, 'AGENTS.md');
47
+ const agentMd = join(repoRoot, 'AGENT.md');
48
+ if (existsSync(agentsMd)) {
49
+ try {
50
+ const content = readFileSync(agentsMd, 'utf-8');
51
+ return { content, file: 'AGENTS.md' };
52
+ }
53
+ catch (err) {
54
+ console.error(`[repoContext] Warning: Could not read ${agentsMd}: ${err.message}`);
55
+ }
56
+ }
57
+ if (existsSync(agentMd)) {
58
+ try {
59
+ const content = readFileSync(agentMd, 'utf-8');
60
+ return { content, file: 'AGENT.md' };
61
+ }
62
+ catch (err) {
63
+ console.error(`[repoContext] Warning: Could not read ${agentMd}: ${err.message}`);
64
+ }
65
+ }
66
+ return { content: null, file: null };
67
+ }
68
+ /**
69
+ * Escape a path the same way Factory Droid does for its session directories.
70
+ * Factory Droid replaces `/` with `__` and `:` with `_` in directory names.
71
+ */
72
+ function escapePathForFactoryDroid(filePath) {
73
+ return filePath.replace(/\//g, '__').replace(/:/g, '_');
74
+ }
75
+ /**
76
+ * Escape a path the same way Pi does for its session directories.
77
+ * Pi replaces `/` with `-` and `:` with `-` and ` ` with `-`.
78
+ */
79
+ function escapePathForPi(filePath) {
80
+ return filePath.replace(/[/:\s]/g, '-');
81
+ }
82
+ /**
83
+ * Try to find an active harness session that matches the given repo root.
84
+ *
85
+ * Matching strategies (by harness):
86
+ * - **Pi**: sessions dir is `~/.pi/agent/sessions/<escaped-workspace-dir>/`
87
+ * - **Factory Droid**: sessions dir is `~/.factory/sessions/<escaped-cwd>/`
88
+ * - **Claude Code**: no repo-path in directory structure — skip
89
+ * - **Codex**: no repo-path in directory structure — skip
90
+ *
91
+ * If multiple matching sessions exist, returns the most recently modified one.
92
+ */
93
+ export function findMatchingSession(repoRoot) {
94
+ // Try Factory Droid first (most likely harness for this project)
95
+ const droidSession = findDroidSession(repoRoot);
96
+ if (droidSession)
97
+ return droidSession;
98
+ // Try Pi
99
+ const piSession = findPiSession(repoRoot);
100
+ if (piSession)
101
+ return piSession;
102
+ return null;
103
+ }
104
+ function findDroidSession(repoRoot) {
105
+ const sessionsBase = process.env.FACTORY_SESSIONS_DIR ?? join(homedir(), '.factory', 'sessions');
106
+ const escapedDir = escapePathForFactoryDroid(repoRoot);
107
+ const harnessDir = join(sessionsBase, escapedDir);
108
+ return findMostRecentSessionInDir(harnessDir, 'factory-droid', repoRoot);
109
+ }
110
+ function findPiSession(repoRoot) {
111
+ const sessionsBase = process.env.PI_SESSION_DIR ?? join(homedir(), '.pi', 'agent', 'sessions');
112
+ const escapedDir = escapePathForPi(repoRoot);
113
+ const harnessDir = join(sessionsBase, escapedDir);
114
+ return findMostRecentSessionInDir(harnessDir, 'pi', repoRoot);
115
+ }
116
+ function findMostRecentSessionInDir(harnessDir, harness, repoRoot) {
117
+ if (!existsSync(harnessDir))
118
+ return null;
119
+ try {
120
+ const entries = readdirSync(harnessDir, { withFileTypes: true });
121
+ let mostRecent = null;
122
+ for (const entry of entries) {
123
+ if (entry.isFile() && entry.name.endsWith('.jsonl')) {
124
+ const filePath = join(harnessDir, entry.name);
125
+ try {
126
+ const st = statSync(filePath);
127
+ if (st.mtimeMs > (mostRecent?.mtime ?? 0)) {
128
+ mostRecent = { path: filePath, mtime: st.mtimeMs };
129
+ }
130
+ }
131
+ catch {
132
+ // skip unreadable
133
+ }
134
+ }
135
+ }
136
+ if (mostRecent) {
137
+ const sessionId = basename(mostRecent.path, '.jsonl');
138
+ return {
139
+ harness,
140
+ sessionId,
141
+ sessionPath: mostRecent.path,
142
+ repoPath: repoRoot,
143
+ };
144
+ }
145
+ }
146
+ catch {
147
+ // permission or other FS error
148
+ }
149
+ return null;
150
+ }
151
+ /**
152
+ * Resolve full repository context at startup.
153
+ * Non-blocking: if anything fails, returns partial context with nulls.
154
+ */
155
+ export function resolveRepoContext(cwd) {
156
+ const repoRoot = findGitRoot(cwd);
157
+ let repoInstructions = null;
158
+ let instructionsFile = null;
159
+ let autoAttachedSession = null;
160
+ if (repoRoot) {
161
+ const instrResult = loadRepoInstructions(repoRoot);
162
+ repoInstructions = instrResult.content;
163
+ instructionsFile = instrResult.file;
164
+ autoAttachedSession = findMatchingSession(repoRoot);
165
+ }
166
+ return {
167
+ cwd,
168
+ repoRoot,
169
+ repoInstructions,
170
+ instructionsFile,
171
+ autoAttachedSession,
172
+ };
173
+ }
174
+ /**
175
+ * Format startup log messages for repo context.
176
+ */
177
+ export function formatStartupLog(ctx) {
178
+ const lines = [];
179
+ if (ctx.repoRoot) {
180
+ lines.push(`Running in repository: ${ctx.repoRoot}`);
181
+ }
182
+ else {
183
+ lines.push(`Not in a git repository; running from: ${ctx.cwd}`);
184
+ }
185
+ if (ctx.instructionsFile) {
186
+ lines.push(`Loaded ${ctx.instructionsFile} from repo root`);
187
+ }
188
+ if (ctx.autoAttachedSession) {
189
+ const { harness, sessionId } = ctx.autoAttachedSession;
190
+ lines.push(`Matched active ${harness === 'factory-droid' ? 'Factory Droid' : 'Pi'} session for this repo (${sessionId})`);
191
+ }
192
+ else if (ctx.repoRoot) {
193
+ lines.push(`No matching harness session found; starting unattached`);
194
+ }
195
+ return lines;
196
+ }
197
+ //# sourceMappingURL=repoContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoContext.js","sourceRoot":"","sources":["../src/repoContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Router } from 'express';
2
+ import type { AppConfig } from '../config.js';
3
+ export declare function context7SearchImpl(query: string, apiKey: string): Promise<string>;
4
+ export declare function exaSearchImpl(query: string, apiKey: string): Promise<string>;
5
+ export declare function buildGroundingTools(config: AppConfig): Record<string, any>;
6
+ export declare function createBlueprintRouter(config: AppConfig): Router;
7
+ //# sourceMappingURL=blueprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/routes/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW9C,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BvF;AAID,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlF;AAID,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoC1E;AA6FD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CA2W/D"}