@pcircle/memesh 4.5.0 → 4.6.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 (256) hide show
  1. package/.claude-plugin/marketplace.json +5 -3
  2. package/.claude-plugin/plugin.json +6 -4
  3. package/.mcp.json +1 -1
  4. package/AGENTS.md +95 -0
  5. package/README.de.md +130 -39
  6. package/README.md +188 -43
  7. package/README.zh-TW.md +133 -41
  8. package/dashboard/dist/index.html +9 -9
  9. package/dist/cli/view-live.js +3 -3
  10. package/dist/core/analytics.d.ts +3 -3
  11. package/dist/core/analytics.d.ts.map +1 -1
  12. package/dist/core/analytics.js.map +1 -1
  13. package/dist/core/auto-tagger.d.ts.map +1 -1
  14. package/dist/core/auto-tagger.js +4 -9
  15. package/dist/core/auto-tagger.js.map +1 -1
  16. package/dist/core/briefing.d.ts +8 -0
  17. package/dist/core/briefing.d.ts.map +1 -0
  18. package/dist/core/briefing.js +91 -0
  19. package/dist/core/briefing.js.map +1 -0
  20. package/dist/core/capture-flag.d.ts +5 -0
  21. package/dist/core/capture-flag.d.ts.map +1 -0
  22. package/dist/core/capture-flag.js +10 -0
  23. package/dist/core/capture-flag.js.map +1 -0
  24. package/dist/core/config.d.ts +0 -1
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +2 -1
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/conflict-candidates.d.ts +20 -0
  29. package/dist/core/conflict-candidates.d.ts.map +1 -0
  30. package/dist/core/conflict-candidates.js +79 -0
  31. package/dist/core/conflict-candidates.js.map +1 -0
  32. package/dist/core/conflict-judge.d.ts +47 -0
  33. package/dist/core/conflict-judge.d.ts.map +1 -0
  34. package/dist/core/conflict-judge.js +189 -0
  35. package/dist/core/conflict-judge.js.map +1 -0
  36. package/dist/core/demo.d.ts +2 -2
  37. package/dist/core/demo.d.ts.map +1 -1
  38. package/dist/core/demo.js.map +1 -1
  39. package/dist/core/digest-validator.d.ts.map +1 -1
  40. package/dist/core/digest-validator.js +3 -5
  41. package/dist/core/digest-validator.js.map +1 -1
  42. package/dist/core/doctor.d.ts +3 -0
  43. package/dist/core/doctor.d.ts.map +1 -1
  44. package/dist/core/doctor.js +207 -85
  45. package/dist/core/doctor.js.map +1 -1
  46. package/dist/core/dreamer.d.ts +20 -9
  47. package/dist/core/dreamer.d.ts.map +1 -1
  48. package/dist/core/dreamer.js +416 -58
  49. package/dist/core/dreamer.js.map +1 -1
  50. package/dist/core/embedder.d.ts +7 -5
  51. package/dist/core/embedder.d.ts.map +1 -1
  52. package/dist/core/embedder.js +38 -9
  53. package/dist/core/embedder.js.map +1 -1
  54. package/dist/core/extractor.d.ts.map +1 -1
  55. package/dist/core/extractor.js +2 -1
  56. package/dist/core/extractor.js.map +1 -1
  57. package/dist/core/failure-analyzer.d.ts.map +1 -1
  58. package/dist/core/failure-analyzer.js +7 -12
  59. package/dist/core/failure-analyzer.js.map +1 -1
  60. package/dist/core/graph.d.ts +4 -4
  61. package/dist/core/graph.d.ts.map +1 -1
  62. package/dist/core/graph.js.map +1 -1
  63. package/dist/core/install-channel.d.ts +1 -1
  64. package/dist/core/install-channel.d.ts.map +1 -1
  65. package/dist/core/install-channel.js +16 -5
  66. package/dist/core/install-channel.js.map +1 -1
  67. package/dist/core/install-hooks.d.ts +6 -0
  68. package/dist/core/install-hooks.d.ts.map +1 -1
  69. package/dist/core/install-hooks.js +0 -0
  70. package/dist/core/install-hooks.js.map +1 -1
  71. package/dist/core/json-utils.d.ts +1 -0
  72. package/dist/core/json-utils.d.ts.map +1 -1
  73. package/dist/core/json-utils.js +19 -10
  74. package/dist/core/json-utils.js.map +1 -1
  75. package/dist/core/kg-backfill.d.ts +3 -4
  76. package/dist/core/kg-backfill.d.ts.map +1 -1
  77. package/dist/core/kg-backfill.js +1 -4
  78. package/dist/core/kg-backfill.js.map +1 -1
  79. package/dist/core/lesson-engine.d.ts +1 -0
  80. package/dist/core/lesson-engine.d.ts.map +1 -1
  81. package/dist/core/lesson-engine.js +1 -0
  82. package/dist/core/lesson-engine.js.map +1 -1
  83. package/dist/core/lifecycle.d.ts +4 -4
  84. package/dist/core/lifecycle.d.ts.map +1 -1
  85. package/dist/core/lifecycle.js +15 -22
  86. package/dist/core/lifecycle.js.map +1 -1
  87. package/dist/core/llm-client.d.ts.map +1 -1
  88. package/dist/core/llm-client.js +3 -6
  89. package/dist/core/llm-client.js.map +1 -1
  90. package/dist/core/llm-telemetry.d.ts +4 -4
  91. package/dist/core/llm-telemetry.d.ts.map +1 -1
  92. package/dist/core/llm-telemetry.js +1 -1
  93. package/dist/core/llm-telemetry.js.map +1 -1
  94. package/dist/core/memory-tool.d.ts.map +1 -1
  95. package/dist/core/memory-tool.js +8 -4
  96. package/dist/core/memory-tool.js.map +1 -1
  97. package/dist/core/operations.d.ts.map +1 -1
  98. package/dist/core/operations.js +41 -17
  99. package/dist/core/operations.js.map +1 -1
  100. package/dist/core/paths.d.ts +3 -0
  101. package/dist/core/paths.d.ts.map +1 -1
  102. package/dist/core/paths.js +67 -1
  103. package/dist/core/paths.js.map +1 -1
  104. package/dist/core/patterns.d.ts +2 -2
  105. package/dist/core/patterns.d.ts.map +1 -1
  106. package/dist/core/patterns.js.map +1 -1
  107. package/dist/core/project-tags.d.ts +3 -3
  108. package/dist/core/project-tags.d.ts.map +1 -1
  109. package/dist/core/project-tags.js.map +1 -1
  110. package/dist/core/projects.d.ts +2 -2
  111. package/dist/core/projects.d.ts.map +1 -1
  112. package/dist/core/projects.js.map +1 -1
  113. package/dist/core/prompt-safety.d.ts +1 -0
  114. package/dist/core/prompt-safety.d.ts.map +1 -1
  115. package/dist/core/prompt-safety.js +7 -0
  116. package/dist/core/prompt-safety.js.map +1 -1
  117. package/dist/core/schema-export.d.ts.map +1 -1
  118. package/dist/core/schema-export.js +27 -30
  119. package/dist/core/schema-export.js.map +1 -1
  120. package/dist/core/serializer.d.ts.map +1 -1
  121. package/dist/core/serializer.js +45 -4
  122. package/dist/core/serializer.js.map +1 -1
  123. package/dist/core/setup.d.ts +29 -0
  124. package/dist/core/setup.d.ts.map +1 -0
  125. package/dist/core/setup.js +127 -0
  126. package/dist/core/setup.js.map +1 -0
  127. package/dist/core/stats.d.ts +2 -2
  128. package/dist/core/stats.d.ts.map +1 -1
  129. package/dist/core/stats.js.map +1 -1
  130. package/dist/core/task-state-store.d.ts +17 -0
  131. package/dist/core/task-state-store.d.ts.map +1 -0
  132. package/dist/core/task-state-store.js +45 -0
  133. package/dist/core/task-state-store.js.map +1 -0
  134. package/dist/core/task-state.d.ts +19 -0
  135. package/dist/core/task-state.d.ts.map +1 -0
  136. package/dist/core/task-state.js +91 -0
  137. package/dist/core/task-state.js.map +1 -0
  138. package/dist/core/time-utils.d.ts +2 -0
  139. package/dist/core/time-utils.d.ts.map +1 -0
  140. package/dist/core/time-utils.js +14 -0
  141. package/dist/core/time-utils.js.map +1 -0
  142. package/dist/core/title.d.ts +5 -0
  143. package/dist/core/title.d.ts.map +1 -0
  144. package/dist/core/title.js +14 -0
  145. package/dist/core/title.js.map +1 -0
  146. package/dist/core/transcript-extractor.d.ts +5 -6
  147. package/dist/core/transcript-extractor.d.ts.map +1 -1
  148. package/dist/core/transcript-extractor.js +4 -24
  149. package/dist/core/transcript-extractor.js.map +1 -1
  150. package/dist/core/transcript-source.d.ts.map +1 -1
  151. package/dist/core/transcript-source.js +2 -3
  152. package/dist/core/transcript-source.js.map +1 -1
  153. package/dist/core/types.d.ts +21 -7
  154. package/dist/core/types.d.ts.map +1 -1
  155. package/dist/core/types.js +2 -0
  156. package/dist/core/types.js.map +1 -1
  157. package/dist/core/work-topology.d.ts +33 -0
  158. package/dist/core/work-topology.d.ts.map +1 -0
  159. package/dist/core/work-topology.js +183 -0
  160. package/dist/core/work-topology.js.map +1 -0
  161. package/dist/db.d.ts +5 -10
  162. package/dist/db.d.ts.map +1 -1
  163. package/dist/db.js +194 -196
  164. package/dist/db.js.map +1 -1
  165. package/dist/knowledge-graph.d.ts +4 -2
  166. package/dist/knowledge-graph.d.ts.map +1 -1
  167. package/dist/knowledge-graph.js +68 -49
  168. package/dist/knowledge-graph.js.map +1 -1
  169. package/dist/mcp/server.js +2 -1
  170. package/dist/mcp/server.js.map +1 -1
  171. package/dist/skills-manifest.json +61 -36
  172. package/dist/storage/conflicts.d.ts +3 -3
  173. package/dist/storage/conflicts.d.ts.map +1 -1
  174. package/dist/storage/conflicts.js +2 -7
  175. package/dist/storage/conflicts.js.map +1 -1
  176. package/dist/storage/fts-index.d.ts +6 -4
  177. package/dist/storage/fts-index.d.ts.map +1 -1
  178. package/dist/storage/fts-index.js +16 -4
  179. package/dist/storage/fts-index.js.map +1 -1
  180. package/dist/storage/schema.d.ts +20 -0
  181. package/dist/storage/schema.d.ts.map +1 -0
  182. package/dist/storage/schema.js +274 -0
  183. package/dist/storage/schema.js.map +1 -0
  184. package/dist/storage/sqlite.d.ts +20 -0
  185. package/dist/storage/sqlite.d.ts.map +1 -0
  186. package/dist/storage/sqlite.js +64 -0
  187. package/dist/storage/sqlite.js.map +1 -0
  188. package/dist/storage/vector-index.d.ts +3 -0
  189. package/dist/storage/vector-index.d.ts.map +1 -0
  190. package/dist/storage/vector-index.js +7 -0
  191. package/dist/storage/vector-index.js.map +1 -0
  192. package/dist/transports/cli/cli.d.ts +1 -4
  193. package/dist/transports/cli/cli.d.ts.map +1 -1
  194. package/dist/transports/cli/cli.js +494 -76
  195. package/dist/transports/cli/cli.js.map +1 -1
  196. package/dist/transports/http/retired-routes.d.ts.map +1 -1
  197. package/dist/transports/http/retired-routes.js +1 -0
  198. package/dist/transports/http/retired-routes.js.map +1 -1
  199. package/dist/transports/http/server.d.ts.map +1 -1
  200. package/dist/transports/http/server.js +243 -323
  201. package/dist/transports/http/server.js.map +1 -1
  202. package/dist/transports/mcp/handlers.d.ts +48 -94
  203. package/dist/transports/mcp/handlers.d.ts.map +1 -1
  204. package/dist/transports/mcp/handlers.js +77 -56
  205. package/dist/transports/mcp/handlers.js.map +1 -1
  206. package/dist/transports/schemas.d.ts +31 -40
  207. package/dist/transports/schemas.d.ts.map +1 -1
  208. package/dist/transports/schemas.js +31 -37
  209. package/dist/transports/schemas.js.map +1 -1
  210. package/hooks/hooks.json +0 -10
  211. package/llms-install.md +138 -0
  212. package/package.json +19 -18
  213. package/scripts/hooks/_generated/capture-flag.js +17 -0
  214. package/scripts/hooks/_generated/core-paths.js +67 -1
  215. package/scripts/hooks/_generated/fts-index.js +16 -4
  216. package/scripts/hooks/_generated/schema.js +281 -0
  217. package/scripts/hooks/_generated/sqlite.js +71 -0
  218. package/scripts/hooks/_generated/task-state.js +98 -0
  219. package/scripts/hooks/_generated/time-utils.js +21 -0
  220. package/scripts/hooks/_generated/title.js +21 -0
  221. package/scripts/hooks/_generated/work-topology.js +190 -0
  222. package/scripts/hooks/_shared.js +269 -534
  223. package/scripts/hooks/post-commit.js +55 -10
  224. package/scripts/hooks/pre-compact.js +22 -7
  225. package/scripts/hooks/pre-edit-recall.js +9 -11
  226. package/scripts/hooks/session-start.js +230 -106
  227. package/scripts/hooks/session-summary.js +176 -73
  228. package/scripts/hooks/user-prompt-intent.js +3 -2
  229. package/skills/memesh/SKILL.md +97 -77
  230. package/README.es.md +0 -470
  231. package/README.fr.md +0 -462
  232. package/README.ja.md +0 -470
  233. package/README.ko.md +0 -470
  234. package/README.pt.md +0 -462
  235. package/README.th.md +0 -463
  236. package/README.vi.md +0 -462
  237. package/README.zh-CN.md +0 -469
  238. package/dist/cli/view.d.ts +0 -3
  239. package/dist/cli/view.d.ts.map +0 -1
  240. package/dist/cli/view.js +0 -523
  241. package/dist/cli/view.js.map +0 -1
  242. package/dist/core/skill-usage-log.d.ts +0 -11
  243. package/dist/core/skill-usage-log.d.ts.map +0 -1
  244. package/dist/core/skill-usage-log.js +0 -125
  245. package/dist/core/skill-usage-log.js.map +0 -1
  246. package/dist/core/verifier.d.ts +0 -40
  247. package/dist/core/verifier.d.ts.map +0 -1
  248. package/dist/core/verifier.js +0 -206
  249. package/dist/core/verifier.js.map +0 -1
  250. package/dist/mcp/launcher.d.ts +0 -3
  251. package/dist/mcp/launcher.d.ts.map +0 -1
  252. package/dist/mcp/launcher.js +0 -37
  253. package/dist/mcp/launcher.js.map +0 -1
  254. package/scripts/hooks/pre-bash-orchestration-nudge.js +0 -155
  255. package/scripts/postinstall-rebuild.mjs +0 -41
  256. package/skills/agentic-orchestration/SKILL.md +0 -399
@@ -10,6 +10,7 @@ export function exportOpenAITools() {
10
10
  properties: {
11
11
  name: { type: 'string', description: 'Unique entity name' },
12
12
  type: { type: 'string', description: 'Entity type (decision, pattern, lesson, etc.)' },
13
+ title: { type: 'string', description: 'Short human-readable label, distinct from name (a stable machine key)' },
13
14
  observations: { type: 'array', items: { type: 'string' }, description: 'Key facts about this entity' },
14
15
  tags: { type: 'array', items: { type: 'string' }, description: 'Tags for filtering' },
15
16
  relations: {
@@ -122,16 +123,16 @@ export function exportOpenAITools() {
122
123
  {
123
124
  type: 'function',
124
125
  function: {
125
- name: 'memesh_user_patterns',
126
- description: 'Analyze user work patterns from existing memory. Returns work schedule, tool preferences, focus areas, workflow metrics, strengths, and learning areas.',
126
+ name: 'memesh_task_state',
127
+ description: 'Read or update where the work stands on this project (goal, next, blocked, done). Call with no arguments to read. Record only what the user actually stated — never infer it from files edited.',
127
128
  parameters: {
128
129
  type: 'object',
129
130
  properties: {
130
- categories: {
131
- type: 'array',
132
- items: { type: 'string', enum: ['workSchedule', 'toolPreferences', 'focusAreas', 'workflow', 'strengths', 'learningAreas'] },
133
- description: 'Specific categories to return. Omit for all.',
134
- },
131
+ project: { type: 'string', description: 'Project name. Omit for the current directory’s project.' },
132
+ goal: { type: 'string', description: 'What this work is FOR' },
133
+ next: { type: 'string', description: 'The next concrete step' },
134
+ blocked: { type: 'string', description: 'What is standing in the way' },
135
+ done: { type: 'string', description: 'What was just finished' },
135
136
  },
136
137
  },
137
138
  },
@@ -139,34 +140,30 @@ export function exportOpenAITools() {
139
140
  {
140
141
  type: 'function',
141
142
  function: {
142
- name: 'memesh_verify_agent_work',
143
- description: 'Record a verification report for work done by a background agent. Runs git reality-check (files changed vs claim) and persists the result as a verification_record entity. Returns verdict: "pass" | "fail" | "unverified" with neither claim nor report there is nothing to check, and the verdict is "unverified", not "pass".',
143
+ name: 'memesh_briefing',
144
+ description: 'The assembled work topology for a project: where the work was left off, decisions, lessons, knowledge, recent activity. Call once at the start of a session to load project context.',
144
145
  parameters: {
145
146
  type: 'object',
146
147
  properties: {
147
- agent_id: { type: 'string', description: 'Identifier for the agent whose work is being verified' },
148
- workdir: { type: 'string', description: 'Absolute path to the git working tree' },
149
- base: { type: 'string', description: 'Git ref/sha to diff against (default: merge-base with origin/main)' },
150
- claim: {
151
- type: 'object',
152
- properties: {
153
- expected_files: { type: 'number', description: 'Files the agent claimed to change' },
154
- },
155
- },
156
- report: {
157
- type: 'object',
158
- description: 'Pre-computed external report (typecheck/tests/lint/build)',
159
- properties: {
160
- pass: { type: 'boolean' },
161
- typecheck: { type: 'object', properties: { pass: { type: 'boolean' }, summary: { type: 'string' } } },
162
- tests: { type: 'object', properties: { pass: { type: 'boolean' }, summary: { type: 'string' } } },
163
- lint: { type: 'object', properties: { pass: { type: 'boolean' }, summary: { type: 'string' } } },
164
- build: { type: 'object', properties: { pass: { type: 'boolean' }, summary: { type: 'string' } } },
165
- summary: { type: 'string' },
166
- },
148
+ project: { type: 'string', description: 'Project name. Omit for the current directory’s project.' },
149
+ },
150
+ },
151
+ },
152
+ },
153
+ {
154
+ type: 'function',
155
+ function: {
156
+ name: 'memesh_user_patterns',
157
+ description: 'Analyze user work patterns from existing memory. Returns work schedule, tool preferences, focus areas, workflow metrics, strengths, and learning areas.',
158
+ parameters: {
159
+ type: 'object',
160
+ properties: {
161
+ categories: {
162
+ type: 'array',
163
+ items: { type: 'string', enum: ['workSchedule', 'toolPreferences', 'focusAreas', 'workflow', 'strengths', 'learningAreas'] },
164
+ description: 'Specific categories to return. Omit for all.',
167
165
  },
168
166
  },
169
- required: ['agent_id', 'workdir'],
170
167
  },
171
168
  },
172
169
  },
@@ -1 +1 @@
1
- {"version":3,"file":"schema-export.js","sourceRoot":"","sources":["../../src/core/schema-export.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,sEAAsE;gBACnF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;wBAC3D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;wBACtF,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE;wBACtG,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE;wBACrF,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,qFAAqF;4BAClG,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;oCAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;iCAChG;gCACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;6BACzB;yBACF;wBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE;qBACtH;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;iBAC3B;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,2EAA2E;gBACxF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;wBACtD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;wBACrD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBAC1E,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8DAA8D,EAAE;wBAClH,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE;wBAC/G,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6EAA6E,EAAE;qBAC/H;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,qDAAqD;gBAClE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;wBAC/D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;qBAC1F;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,kHAAkH;gBAC/H,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBAChE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;wBACvG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;qBAC7F;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,2GAA2G;gBACxH,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wFAAwF;yBACtG;wBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;wBACrG,cAAc,EAAE;4BACd,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;4BACrC,WAAW,EAAE,uGAAuG;yBACrH;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC;iBACrC;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,yDAAyD;gBACtE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;wBACzD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;wBACrD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;wBAC9D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;wBAC1E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE;qBAClG;oBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;iBAC3B;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EAAE,yJAAyJ;gBACtK,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE;4BAC5H,WAAW,EAAE,8CAA8C;yBAC5D;qBACF;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,0BAA0B;gBAChC,WAAW,EAAE,oUAAoU;gBACjV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;wBAClG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;wBACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oEAAoE,EAAE;wBAC3G,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;6BACrF;yBACF;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,2DAA2D;4BACxE,UAAU,EAAE;gCACV,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gCACzB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;gCACrG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;gCACjG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;gCAChG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;gCACjG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC5B;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;iBAClC;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"schema-export.js","sourceRoot":"","sources":["../../src/core/schema-export.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/core/serializer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8BvF,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAwB9D;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAuE9D"}
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/core/serializer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8BvF,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAwB9D;AAwDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CA2H9D"}
@@ -1,5 +1,6 @@
1
1
  import { getDatabase } from '../db.js';
2
2
  import { KnowledgeGraph } from '../knowledge-graph.js';
3
+ import { NAMESPACES } from './types.js';
3
4
  function buildImportedMetadata(existingMetadata, args) {
4
5
  return {
5
6
  ...(existingMetadata ?? {}),
@@ -37,17 +38,57 @@ export function exportMemories(args) {
37
38
  })),
38
39
  };
39
40
  }
41
+ const MERGE_STRATEGIES = ['skip', 'overwrite', 'append'];
42
+ function describeInvalidEntity(entity, index) {
43
+ const where = `entities[${index}]`;
44
+ if (typeof entity !== 'object' || entity === null || Array.isArray(entity)) {
45
+ return `${where} is ${Array.isArray(entity) ? 'an array' : typeof entity}, not an object with "name" and "type".`;
46
+ }
47
+ const e = entity;
48
+ for (const field of ['name', 'type']) {
49
+ if (typeof e[field] !== 'string' || e[field] === '') {
50
+ return `${where} has no usable "${field}" (found ${e[field] === undefined ? 'nothing' : JSON.stringify(e[field])}).`;
51
+ }
52
+ }
53
+ for (const field of ['observations', 'tags', 'relations']) {
54
+ if (e[field] !== undefined && !Array.isArray(e[field])) {
55
+ return `${where}.${field} is ${typeof e[field]}, not an array.`;
56
+ }
57
+ }
58
+ if (e.namespace !== undefined && !NAMESPACES.includes(e.namespace)) {
59
+ return `${where}.namespace is ${JSON.stringify(e.namespace)}, which is not one of: ${NAMESPACES.join(', ')}.`;
60
+ }
61
+ return null;
62
+ }
40
63
  export function importMemories(args) {
64
+ if (!MERGE_STRATEGIES.includes(args.merge_strategy)) {
65
+ throw new Error(`Unknown merge strategy "${args.merge_strategy}". Use one of: ${MERGE_STRATEGIES.join(', ')}. ` +
66
+ 'Nothing was imported — refusing rather than guessing, because the wrong guess overwrites existing memories.');
67
+ }
68
+ if (args.namespace !== undefined && !NAMESPACES.includes(args.namespace)) {
69
+ throw new Error(`Unknown namespace "${args.namespace}". Use one of: ${NAMESPACES.join(', ')}. ` +
70
+ 'Nothing was imported — an unrecognised namespace would move existing memories somewhere nothing queries.');
71
+ }
72
+ const bundleEntities = args.data?.entities;
73
+ if (!Array.isArray(bundleEntities)) {
74
+ throw new Error(`This file has no "entities" array (found ${bundleEntities === undefined ? 'nothing' : typeof bundleEntities}). ` +
75
+ 'Nothing was imported. memesh import expects a file produced by `memesh export`.');
76
+ }
41
77
  const db = getDatabase();
42
78
  const kg = new KnowledgeGraph(db);
43
79
  let imported = 0;
44
80
  let skipped = 0;
45
81
  let appended = 0;
46
82
  const errors = [];
47
- for (const entity of args.data.entities) {
83
+ for (const [index, entity] of args.data.entities.entries()) {
84
+ const invalid = describeInvalidEntity(entity, index);
85
+ if (invalid) {
86
+ errors.push(invalid);
87
+ continue;
88
+ }
48
89
  try {
49
90
  const existing = kg.getEntity(entity.name);
50
- const namespace = args.namespace || entity.namespace || 'personal';
91
+ const namespace = args.namespace ?? (existing ? undefined : (entity.namespace || 'personal'));
51
92
  const importedMetadata = buildImportedMetadata(existing?.metadata, {
52
93
  exportedAt: args.data.exported_at,
53
94
  importVersion: args.data.version,
@@ -65,7 +106,7 @@ export function importMemories(args) {
65
106
  namespace,
66
107
  trustOverride: 'untrusted',
67
108
  });
68
- kg.updateEntityMetadata(entity.name, () => importedMetadata);
109
+ kg.updateEntityMetadata(entity.name, (current) => ({ ...current, ...importedMetadata }));
69
110
  appended++;
70
111
  continue;
71
112
  }
@@ -79,7 +120,7 @@ export function importMemories(args) {
79
120
  trustOverride: 'untrusted',
80
121
  });
81
122
  if (existing) {
82
- kg.updateEntityMetadata(entity.name, () => importedMetadata);
123
+ kg.updateEntityMetadata(entity.name, (current) => ({ ...current, ...importedMetadata }));
83
124
  }
84
125
  for (const rel of entity.relations || []) {
85
126
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/core/serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/core/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type HostId = 'claude-code' | 'codex' | 'gemini';
2
+ export interface RunResult {
3
+ status: number | null;
4
+ stderr: string;
5
+ }
6
+ export interface SetupSeams {
7
+ home: () => string;
8
+ isOnPath: (bin: string) => boolean;
9
+ run: (cmd: string, args: string[]) => RunResult;
10
+ installedPluginsPath?: string;
11
+ }
12
+ export interface WireAction {
13
+ kind: 'run' | 'install-hooks';
14
+ label: string;
15
+ cmd?: string;
16
+ args?: string[];
17
+ }
18
+ export interface HostStatus {
19
+ host: HostId;
20
+ title: string;
21
+ present: boolean;
22
+ presenceDetail: string;
23
+ wired: boolean | null;
24
+ wiredDetail: string;
25
+ actions: WireAction[];
26
+ }
27
+ export declare function inspectHosts(seams: SetupSeams): HostStatus[];
28
+ export declare function allWired(statuses: HostStatus[]): boolean;
29
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"AA2CA,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,CAAC;IAEhD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IAEzB,IAAI,EAAE,KAAK,GAAG,eAAe,CAAC;IAE9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,OAAO,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IAEvB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAEtB,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAkJD,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,CAE5D;AAOD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAExD"}
@@ -0,0 +1,127 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { detectPluginRuntime, settingsHaveMemeshHooks } from './install-hooks.js';
4
+ function inspectClaudeCode(seams) {
5
+ const claudeDir = path.join(seams.home(), '.claude');
6
+ const present = fs.existsSync(claudeDir);
7
+ const status = {
8
+ host: 'claude-code',
9
+ title: 'Claude Code',
10
+ present,
11
+ presenceDetail: claudeDir,
12
+ wired: null,
13
+ wiredDetail: '',
14
+ actions: [],
15
+ };
16
+ if (!present) {
17
+ status.wiredDetail = 'not on this machine — nothing to wire';
18
+ return status;
19
+ }
20
+ const plugin = detectPluginRuntime(seams.installedPluginsPath ?? path.join(claudeDir, 'plugins', 'installed_plugins.json'));
21
+ if (plugin) {
22
+ status.wired = true;
23
+ status.wiredDetail = `plugin v${plugin.version} manages hooks, MCP and skills (installed_plugins.json)`;
24
+ return status;
25
+ }
26
+ const settingsPath = path.join(claudeDir, 'settings.json');
27
+ const hooksWired = settingsHaveMemeshHooks(settingsPath);
28
+ let mcpWired = null;
29
+ let mcpDetail;
30
+ if (seams.isOnPath('claude')) {
31
+ const probe = seams.run('claude', ['mcp', 'get', 'memesh']);
32
+ mcpWired = probe.status === 0;
33
+ mcpDetail = mcpWired ? 'claude mcp get memesh → registered' : 'claude mcp get memesh → not registered';
34
+ }
35
+ else {
36
+ mcpDetail = 'claude CLI not on PATH — cannot probe MCP registration';
37
+ }
38
+ status.wired = hooksWired ? mcpWired : false;
39
+ status.wiredDetail = `${hooksWired ? 'hooks wired (settings.json)' : 'hooks NOT wired (no _memesh marker in settings.json)'}; ${mcpDetail}`;
40
+ if (!hooksWired) {
41
+ status.actions.push({
42
+ kind: 'install-hooks',
43
+ label: 'Wire the session hooks into ~/.claude/settings.json (backs the file up first)',
44
+ });
45
+ }
46
+ if (mcpWired === false) {
47
+ status.actions.push({
48
+ kind: 'run',
49
+ label: 'Register the MCP server with Claude Code (user scope, all folders)',
50
+ cmd: 'claude',
51
+ args: ['mcp', 'add', '-s', 'user', 'memesh', 'memesh-mcp'],
52
+ });
53
+ }
54
+ return status;
55
+ }
56
+ function inspectCodex(seams) {
57
+ const present = seams.isOnPath('codex');
58
+ const status = {
59
+ host: 'codex',
60
+ title: 'Codex CLI',
61
+ present,
62
+ presenceDetail: 'codex on PATH',
63
+ wired: null,
64
+ wiredDetail: present ? '' : 'not on this machine — nothing to wire',
65
+ actions: [],
66
+ };
67
+ if (!present)
68
+ return status;
69
+ const probe = seams.run('codex', ['mcp', 'get', 'memesh']);
70
+ if (probe.status === null) {
71
+ status.wiredDetail = 'codex mcp get failed to run — could not determine';
72
+ }
73
+ else {
74
+ status.wired = probe.status === 0;
75
+ status.wiredDetail = status.wired ? 'codex mcp get memesh → registered' : 'codex mcp get memesh → not registered';
76
+ if (!status.wired) {
77
+ status.actions.push({
78
+ kind: 'run',
79
+ label: 'Register the MCP server with Codex CLI',
80
+ cmd: 'codex',
81
+ args: ['mcp', 'add', 'memesh', '--', 'memesh-mcp'],
82
+ });
83
+ }
84
+ }
85
+ return status;
86
+ }
87
+ function inspectGemini(seams) {
88
+ const present = seams.isOnPath('gemini');
89
+ const status = {
90
+ host: 'gemini',
91
+ title: 'Gemini CLI',
92
+ present,
93
+ presenceDetail: 'gemini on PATH',
94
+ wired: null,
95
+ wiredDetail: present ? '' : 'not on this machine — nothing to wire',
96
+ actions: [],
97
+ };
98
+ if (!present)
99
+ return status;
100
+ const settingsPath = path.join(seams.home(), '.gemini', 'settings.json');
101
+ let wired = false;
102
+ try {
103
+ const parsed = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
104
+ wired = Boolean(parsed.mcpServers && Object.prototype.hasOwnProperty.call(parsed.mcpServers, 'memesh'));
105
+ }
106
+ catch { }
107
+ status.wired = wired;
108
+ status.wiredDetail = wired
109
+ ? 'mcpServers.memesh present in ~/.gemini/settings.json'
110
+ : 'no mcpServers.memesh in ~/.gemini/settings.json';
111
+ if (!wired) {
112
+ status.actions.push({
113
+ kind: 'run',
114
+ label: 'Register the MCP server with Gemini CLI (user scope, all folders)',
115
+ cmd: 'gemini',
116
+ args: ['mcp', 'add', '-s', 'user', 'memesh', 'memesh-mcp'],
117
+ });
118
+ }
119
+ return status;
120
+ }
121
+ export function inspectHosts(seams) {
122
+ return [inspectClaudeCode(seams), inspectCodex(seams), inspectGemini(seams)];
123
+ }
124
+ export function allWired(statuses) {
125
+ return statuses.every((s) => !s.present || (s.actions.length === 0 && s.wired !== false));
126
+ }
127
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type Database from 'better-sqlite3';
1
+ import type { MemeshDatabase } from '../storage/sqlite.js';
2
2
  export interface StatsResult {
3
3
  totalEntities: number;
4
4
  totalObservations: number;
@@ -8,5 +8,5 @@ export interface StatsResult {
8
8
  tagDistribution: unknown[];
9
9
  statusDistribution: unknown[];
10
10
  }
11
- export declare function computeStats(db: Database.Database): StatsResult;
11
+ export declare function computeStats(db: MemeshDatabase): StatsResult;
12
12
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,kBAAkB,EAAE,OAAO,EAAE,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAyB/D"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,kBAAkB,EAAE,OAAO,EAAE,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAyB5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAc,CAAC;IACpF,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAc,CAAC;IAC5F,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAc,CAAC;IACtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAAc,CAAC;IAEvF,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CACjC,yFAAyF,CAC1F,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,mFAAmF,CACpF,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CACnC,gEAAgE,CACjE,CAAC,GAAG,EAAE,CAAC;IAER,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,CAAC;QACzB,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACjC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC3B,SAAS,EAAE,IAAI,CAAC,CAAC;QACjB,gBAAgB;QAChB,eAAe;QACf,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,YAAY,CAAC,EAAkB;IAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAc,CAAC;IACpF,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAc,CAAC;IAC5F,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAc,CAAC;IACtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAAc,CAAC;IAEvF,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CACjC,yFAAyF,CAC1F,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,mFAAmF,CACpF,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CACnC,gEAAgE,CACjE,CAAC,GAAG,EAAE,CAAC;IAER,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,CAAC;QACzB,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACjC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC3B,SAAS,EAAE,IAAI,CAAC,CAAC;QACjB,gBAAgB;QAChB,eAAe;QACf,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type TaskState, type TaskStateField } from './task-state.js';
2
+ export interface SetTaskStateInput {
3
+ project?: string;
4
+ patch: Partial<Record<TaskStateField, string>>;
5
+ sourceHost?: string;
6
+ }
7
+ export interface SetTaskStateResult {
8
+ project: string;
9
+ state: TaskState;
10
+ changed: TaskStateField[];
11
+ }
12
+ export declare function getTaskState(project?: string): {
13
+ project: string;
14
+ state: TaskState;
15
+ };
16
+ export declare function setTaskState(input: SetTaskStateInput): SetTaskStateResult;
17
+ //# sourceMappingURL=task-state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state-store.d.ts","sourceRoot":"","sources":["../../src/core/task-state-store.ts"],"names":[],"mappings":"AAkBA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,iBAAiB;IAEhC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IAEjB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAmBD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAGpF;AAUD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAmCzE"}
@@ -0,0 +1,45 @@
1
+ import { getDatabase } from '../db.js';
2
+ import { KnowledgeGraph } from '../knowledge-graph.js';
3
+ import { getProjectName } from './paths.js';
4
+ import { remember } from './operations.js';
5
+ import { TASK_STATE_TYPE, taskStateName, parseTaskState, mergeTaskState, } from './task-state.js';
6
+ function readState(name) {
7
+ const row = getDatabase()
8
+ .prepare('SELECT metadata FROM entities WHERE name = ?')
9
+ .get(name);
10
+ if (!row?.metadata)
11
+ return {};
12
+ try {
13
+ return parseTaskState(JSON.parse(row.metadata));
14
+ }
15
+ catch {
16
+ return {};
17
+ }
18
+ }
19
+ export function getTaskState(project) {
20
+ const resolved = project ?? getProjectName();
21
+ return { project: resolved, state: readState(taskStateName(resolved)) };
22
+ }
23
+ export function setTaskState(input) {
24
+ const project = input.project ?? getProjectName();
25
+ const name = taskStateName(project);
26
+ const previous = readState(name);
27
+ const { state, changed, observations } = mergeTaskState(previous, input.patch, new Date().toISOString());
28
+ if (changed.length === 0)
29
+ return { project, state, changed };
30
+ const title = state.goal ?? state.next ?? state.blocked ?? state.done ?? `Task state for ${project}`;
31
+ remember({
32
+ name,
33
+ type: TASK_STATE_TYPE,
34
+ observations,
35
+ tags: [`project:${project}`],
36
+ title,
37
+ sourceHost: input.sourceHost,
38
+ });
39
+ new KnowledgeGraph(getDatabase()).updateEntityMetadata(name, (current) => ({
40
+ ...current,
41
+ task_state: state,
42
+ }));
43
+ return { project, state, changed };
44
+ }
45
+ //# sourceMappingURL=task-state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state-store.js","sourceRoot":"","sources":["../../src/core/task-state-store.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAgBzB,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,WAAW,EAAE;SACtB,OAAO,CAAC,8CAA8C,CAAC;SACvD,GAAG,CAAC,IAAI,CAA4C,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QAKP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,QAAQ,GAAG,OAAO,IAAI,cAAc,EAAE,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CACrD,QAAQ,EACR,KAAK,CAAC,KAAK,EACX,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACzB,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAK7D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,kBAAkB,OAAO,EAAE,CAAC;IAErG,QAAQ,CAAC;QACP,IAAI;QACJ,IAAI,EAAE,eAAe;QACrB,YAAY;QACZ,IAAI,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC;QAC5B,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC;IAKH,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzE,GAAG,OAAO;QACV,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare const TASK_STATE_TYPE = "task-state";
2
+ export declare const TASK_STATE_FIELDS: readonly ["goal", "next", "blocked", "done"];
3
+ export type TaskStateField = (typeof TASK_STATE_FIELDS)[number];
4
+ export type TaskState = Partial<Record<TaskStateField, string>> & {
5
+ updated_at?: string;
6
+ };
7
+ export declare const MAX_FIELD_CHARS = 300;
8
+ export declare function taskStateName(project: string): string;
9
+ export declare function parseTaskState(metadata: unknown): TaskState;
10
+ export declare function normalizeFieldValue(value: string): string | null;
11
+ export interface TaskStateMerge {
12
+ state: TaskState;
13
+ changed: TaskStateField[];
14
+ observations: string[];
15
+ }
16
+ export declare function mergeTaskState(previous: TaskState, patch: Partial<Record<TaskStateField, string>>, now: string): TaskStateMerge;
17
+ export declare function isEmptyTaskState(state: TaskState): boolean;
18
+ export declare function taskStateLines(state: TaskState, project: string, now?: Date): string[];
19
+ //# sourceMappingURL=task-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state.d.ts","sourceRoot":"","sources":["../../src/core/task-state.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,eAAe,eAAe,CAAC;AAO5C,eAAO,MAAM,iBAAiB,8CAA+C,CAAC;AAE9E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG;IAEhE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,eAAe,MAAM,CAAC;AAOnC,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAUD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAe3D;AAUD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhE;AAED,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,SAAS,CAAC;IAEjB,OAAO,EAAE,cAAc,EAAE,CAAC;IAE1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAUD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,EAC9C,GAAG,EAAE,MAAM,GACV,cAAc,CAuBhB;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE1D;AA0BD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,IAAiB,GACrB,MAAM,EAAE,CAUV"}
@@ -0,0 +1,91 @@
1
+ export const TASK_STATE_TYPE = 'task-state';
2
+ export const TASK_STATE_FIELDS = ['goal', 'next', 'blocked', 'done'];
3
+ export const MAX_FIELD_CHARS = 300;
4
+ export function taskStateName(project) {
5
+ return `${TASK_STATE_TYPE}:${project}`;
6
+ }
7
+ export function parseTaskState(metadata) {
8
+ const state = {};
9
+ if (!metadata || typeof metadata !== 'object')
10
+ return state;
11
+ const raw = metadata.task_state;
12
+ if (!raw || typeof raw !== 'object')
13
+ return state;
14
+ const bag = raw;
15
+ for (const field of TASK_STATE_FIELDS) {
16
+ const value = bag[field];
17
+ if (typeof value !== 'string')
18
+ continue;
19
+ const trimmed = value.trim();
20
+ if (trimmed)
21
+ state[field] = trimmed;
22
+ }
23
+ const updated = bag.updated_at;
24
+ if (typeof updated === 'string' && updated.trim())
25
+ state.updated_at = updated.trim();
26
+ return state;
27
+ }
28
+ export function normalizeFieldValue(value) {
29
+ const flat = value.replace(/\s+/g, ' ').trim();
30
+ if (!flat)
31
+ return null;
32
+ return flat.length > MAX_FIELD_CHARS ? `${flat.slice(0, MAX_FIELD_CHARS - 1).trimEnd()}…` : flat;
33
+ }
34
+ export function mergeTaskState(previous, patch, now) {
35
+ const state = { ...previous };
36
+ const changed = [];
37
+ const observations = [];
38
+ for (const field of TASK_STATE_FIELDS) {
39
+ const incoming = patch[field];
40
+ if (incoming === undefined)
41
+ continue;
42
+ const normalized = normalizeFieldValue(incoming);
43
+ const current = state[field];
44
+ if (normalized === (current ?? null))
45
+ continue;
46
+ changed.push(field);
47
+ if (normalized === null) {
48
+ delete state[field];
49
+ observations.push(`${field} cleared`);
50
+ }
51
+ else {
52
+ state[field] = normalized;
53
+ observations.push(`${field}: ${normalized}`);
54
+ }
55
+ }
56
+ if (changed.length > 0)
57
+ state.updated_at = now;
58
+ return { state, changed, observations };
59
+ }
60
+ export function isEmptyTaskState(state) {
61
+ return TASK_STATE_FIELDS.every((field) => !state[field]);
62
+ }
63
+ const FIELD_LABELS = {
64
+ goal: 'Goal',
65
+ next: 'Next',
66
+ blocked: 'Blocked',
67
+ done: 'Just finished',
68
+ };
69
+ function ageInDays(updatedAt, now) {
70
+ if (!updatedAt)
71
+ return null;
72
+ const then = Date.parse(updatedAt);
73
+ if (Number.isNaN(then))
74
+ return null;
75
+ const days = Math.floor((now.getTime() - then) / 86_400_000);
76
+ return days >= 0 ? days : null;
77
+ }
78
+ export function taskStateLines(state, project, now = new Date()) {
79
+ if (isEmptyTaskState(state))
80
+ return [];
81
+ const days = ageInDays(state.updated_at, now);
82
+ const age = days === null ? '' : days === 0 ? ' (today)' : days === 1 ? ' (yesterday)' : ` (${days} days ago)`;
83
+ const lines = [`Where "${project}" was left off${age}:`];
84
+ for (const field of TASK_STATE_FIELDS) {
85
+ const value = state[field];
86
+ if (value)
87
+ lines.push(`- ${FIELD_LABELS[field]}: ${value}`);
88
+ }
89
+ return lines;
90
+ }
91
+ //# sourceMappingURL=task-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state.js","sourceRoot":"","sources":["../../src/core/task-state.ts"],"names":[],"mappings":"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"}