abstractnote 0.2.0__tar.gz → 0.3.0__tar.gz

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 (180) hide show
  1. {abstractnote-0.2.0/src/abstractnote.egg-info → abstractnote-0.3.0}/PKG-INFO +6 -2
  2. {abstractnote-0.2.0 → abstractnote-0.3.0}/README.md +5 -1
  3. {abstractnote-0.2.0 → abstractnote-0.3.0}/pyproject.toml +1 -1
  4. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/__init__.py +1 -1
  5. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/runner.py +19 -1
  6. {abstractnote-0.2.0 → abstractnote-0.3.0/src/abstractnote.egg-info}/PKG-INFO +6 -2
  7. {abstractnote-0.2.0 → abstractnote-0.3.0}/LICENSE +0 -0
  8. {abstractnote-0.2.0 → abstractnote-0.3.0}/setup.cfg +0 -0
  9. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/cli.py +0 -0
  10. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/__init__.py +0 -0
  11. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/build.py +0 -0
  12. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/bundle.py +0 -0
  13. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/contract.py +0 -0
  14. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/graph.py +0 -0
  15. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-capture.json +0 -0
  16. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-consolidate.json +0 -0
  17. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-drain.json +0 -0
  18. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-file.json +0 -0
  19. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-mine.json +0 -0
  20. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-process.json +0 -0
  21. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-recall.json +0 -0
  22. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/json/note-reflect.json +0 -0
  23. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/prompts_fallback.py +0 -0
  24. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/flows/schemas_fallback.py +0 -0
  25. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/__init__.py +0 -0
  26. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/appspec.py +0 -0
  27. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/consolidation.py +0 -0
  28. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/health.py +0 -0
  29. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/refile.py +0 -0
  30. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/router.py +0 -0
  31. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/gateway/tools.py +0 -0
  32. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ids.py +0 -0
  33. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/__init__.py +0 -0
  34. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/__main__.py +0 -0
  35. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/agora.py +0 -0
  36. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/claude_sessions.py +0 -0
  37. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/cli.py +0 -0
  38. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/dedupe.py +0 -0
  39. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/files.py +0 -0
  40. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/importers/markdown.py +0 -0
  41. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/__init__.py +0 -0
  42. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/blobs.py +0 -0
  43. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/capture.py +0 -0
  44. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/dates.py +0 -0
  45. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/extract.py +0 -0
  46. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/normalise.py +0 -0
  47. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ingest/refile.py +0 -0
  48. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/ledger.py +0 -0
  49. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/model.py +0 -0
  50. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/__init__.py +0 -0
  51. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/context.py +0 -0
  52. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/demote.py +0 -0
  53. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/generic_words.txt +0 -0
  54. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/merge.py +0 -0
  55. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/packets.py +0 -0
  56. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/__init__.py +0 -0
  57. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/entity_summaries.md +0 -0
  58. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/entity_summaries.system.md +0 -0
  59. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/extract.md +0 -0
  60. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/extract.system.md +0 -0
  61. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/link.md +0 -0
  62. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/link.system.md +0 -0
  63. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_dossier.md +0 -0
  64. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_dossier.system.md +0 -0
  65. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_findings.md +0 -0
  66. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_findings.system.md +0 -0
  67. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_plan.md +0 -0
  68. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/mine_plan.system.md +0 -0
  69. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/quick_filing.md +0 -0
  70. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/quick_filing.system.md +0 -0
  71. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/reflect.md +0 -0
  72. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/reflect.system.md +0 -0
  73. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/synthesize.md +0 -0
  74. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/prompts/synthesize.system.md +0 -0
  75. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/resolve.py +0 -0
  76. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/revise.py +0 -0
  77. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/schemas.py +0 -0
  78. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/validate.py +0 -0
  79. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/process/vocabulary.py +0 -0
  80. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/__init__.py +0 -0
  81. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/changes.py +0 -0
  82. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/communities.py +0 -0
  83. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/consolidation.py +0 -0
  84. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/expand.py +0 -0
  85. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/insights.py +0 -0
  86. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/processing.py +0 -0
  87. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/propagation.py +0 -0
  88. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/reflect.py +0 -0
  89. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/review.py +0 -0
  90. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/search.py +0 -0
  91. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/shapes.py +0 -0
  92. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/stats.py +0 -0
  93. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/recall/then_now.py +0 -0
  94. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/__init__.py +0 -0
  95. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/archive.py +0 -0
  96. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/embeddings.py +0 -0
  97. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/kg.py +0 -0
  98. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/names.py +0 -0
  99. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/notebook.py +0 -0
  100. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/notes.py +0 -0
  101. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/queue.py +0 -0
  102. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/schema.py +0 -0
  103. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/topics.py +0 -0
  104. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/store/vector_index.py +0 -0
  105. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/__init__.py +0 -0
  106. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/capture.py +0 -0
  107. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/consolidation.py +0 -0
  108. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/context.py +0 -0
  109. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/process.py +0 -0
  110. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/queue.py +0 -0
  111. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote/tools/recall.py +0 -0
  112. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote.egg-info/SOURCES.txt +0 -0
  113. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote.egg-info/dependency_links.txt +0 -0
  114. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote.egg-info/entry_points.txt +0 -0
  115. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote.egg-info/requires.txt +0 -0
  116. {abstractnote-0.2.0 → abstractnote-0.3.0}/src/abstractnote.egg-info/top_level.txt +0 -0
  117. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_capture.py +0 -0
  118. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_capture_dates.py +0 -0
  119. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_changes_understood.py +0 -0
  120. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_cli.py +0 -0
  121. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_communities.py +0 -0
  122. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_communities_flow.py +0 -0
  123. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_communities_stale_first.py +0 -0
  124. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_consolidation.py +0 -0
  125. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_consolidation_gaps.py +0 -0
  126. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_consolidation_gateway.py +0 -0
  127. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_dated_views.py +0 -0
  128. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_drain_stale_requeue.py +0 -0
  129. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_entity_names.py +0 -0
  130. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_file_dates.py +0 -0
  131. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_filing_imports.py +0 -0
  132. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_flows_compile.py +0 -0
  133. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_flows_contract.py +0 -0
  134. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_flows_headless.py +0 -0
  135. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_communities.py +0 -0
  136. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_normalize.py +0 -0
  137. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_refile.py +0 -0
  138. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_router.py +0 -0
  139. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_seam_guard.py +0 -0
  140. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_gateway_w10.py +0 -0
  141. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_importer_dates.py +0 -0
  142. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_importers.py +0 -0
  143. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_kg_projection.py +0 -0
  144. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_ledger_provenance.py +0 -0
  145. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_memory_dedupe.py +0 -0
  146. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_model_settings.py +0 -0
  147. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_no_silent_drops.py +0 -0
  148. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_packets.py +0 -0
  149. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_process.py +0 -0
  150. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_process_tools.py +0 -0
  151. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_processing.py +0 -0
  152. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_processor_repair.py +0 -0
  153. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_prompts_kinds.py +0 -0
  154. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_prompts_predicates.py +0 -0
  155. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_prompts_summaries.py +0 -0
  156. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_propagation.py +0 -0
  157. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_queue.py +0 -0
  158. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_queue_claims.py +0 -0
  159. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_queue_errors.py +0 -0
  160. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_read_paths_recovery.py +0 -0
  161. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_rebuild.py +0 -0
  162. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_recall.py +0 -0
  163. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_recall_eval.py +0 -0
  164. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_reflect_no_repeats.py +0 -0
  165. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_reinterpret.py +0 -0
  166. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_retired_hidden.py +0 -0
  167. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_retro.py +0 -0
  168. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_retro_context.py +0 -0
  169. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_retro_flow.py +0 -0
  170. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_retro_router.py +0 -0
  171. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_review_and_archive.py +0 -0
  172. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_search_structural_entities.py +0 -0
  173. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_stats.py +0 -0
  174. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_store.py +0 -0
  175. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_store_support.py +0 -0
  176. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_strict_schemas.py +0 -0
  177. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_stub_llm.py +0 -0
  178. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_summary_ties.py +0 -0
  179. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_topics_canonical.py +0 -0
  180. {abstractnote-0.2.0 → abstractnote-0.3.0}/tests/test_validate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractnote
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: AbstractNote: one endpoint for your notes; a temporal semantic knowledge graph of your life, built on AbstractGateway, AbstractRuntime and AbstractMemory
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  License-Expression: MIT
@@ -45,9 +45,13 @@ runtime and one notebook per user, app hosting), **AbstractRuntime** and **Abstr
45
45
  capture and understanding workflows), **AbstractMemory** (temporal facts) and **AbstractCore**
46
46
  (models, structured output, embeddings).
47
47
 
48
- Status: version 0.2.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
48
+ Status: version 0.3.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
49
49
  `@abstractframework/note` on npm (see [Install](#install)).
50
50
 
51
+ What's new in 0.3.0: the web app follows runs through the gateway's replay view and says when a run waits
52
+ for an answer, the top bar carries the shared Docs assistant and one account widget, and Capture uses the
53
+ shared composer. See [CHANGELOG.md](CHANGELOG.md#030---2026-11-02).
54
+
51
55
  ## What you get
52
56
 
53
57
  - **Capture anywhere**: the web app, the Apple Watch app, the `abstractnote` command line, and
@@ -11,9 +11,13 @@ runtime and one notebook per user, app hosting), **AbstractRuntime** and **Abstr
11
11
  capture and understanding workflows), **AbstractMemory** (temporal facts) and **AbstractCore**
12
12
  (models, structured output, embeddings).
13
13
 
14
- Status: version 0.2.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
14
+ Status: version 0.3.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
15
15
  `@abstractframework/note` on npm (see [Install](#install)).
16
16
 
17
+ What's new in 0.3.0: the web app follows runs through the gateway's replay view and says when a run waits
18
+ for an answer, the top bar carries the shared Docs assistant and one account widget, and Capture uses the
19
+ shared composer. See [CHANGELOG.md](CHANGELOG.md#030---2026-11-02).
20
+
17
21
  ## What you get
18
22
 
19
23
  - **Capture anywhere**: the web app, the Apple Watch app, the `abstractnote` command line, and
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractnote"
7
- version = "0.2.0"
7
+ version = "0.3.0"
8
8
  description = "AbstractNote: one endpoint for your notes; a temporal semantic knowledge graph of your life, built on AbstractGateway, AbstractRuntime and AbstractMemory"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -4,7 +4,7 @@
4
4
  returns the note tools for flows and agents.
5
5
  """
6
6
 
7
- __version__ = "0.2.0"
7
+ __version__ = "0.3.0"
8
8
 
9
9
 
10
10
  def __getattr__(name: str): # lazy: importing abstractnote stays cheap
@@ -62,7 +62,7 @@ class ScriptedLLM:
62
62
  raise AssertionError(f"ScriptedLLM: no AbstractNote schema has the fields {sorted(fields)}")
63
63
 
64
64
  def generate(self, *, prompt: str = "", params: Optional[Dict[str, Any]] = None, **kwargs: Any) -> Dict[str, Any]:
65
- model = (params or {}).get("response_model")
65
+ model = structured_model(params)
66
66
  if model is None:
67
67
  raise AssertionError("ScriptedLLM answers structured calls only (the AbstractNote flows make no other)")
68
68
  name = self.schema_name(model)
@@ -84,6 +84,24 @@ class ScriptedLLM:
84
84
  return {"data": validated, "content": json.dumps(validated), "metadata": {}, "finish_reason": "stop"}
85
85
 
86
86
 
87
+ def structured_model(params: Optional[Mapping[str, Any]]) -> Any:
88
+ """The response model of a structured ``generate`` call, in either shape AbstractRuntime sends.
89
+
90
+ AbstractRuntime 0.15 passes the validator class as ``params["response_model"]``; 0.16.0 and later pass the
91
+ JSON schema as data (``params["response_schema"]`` and ``params["response_schema_name"]``) and leave building
92
+ the validator to the client, with the runtime's own ``prepare_response_model``. ``None`` for an
93
+ unstructured call."""
94
+ params = params or {}
95
+ if params.get("response_model") is not None:
96
+ return params["response_model"]
97
+ schema = params.get("response_schema")
98
+ if schema is None:
99
+ return None
100
+ from abstractruntime.integrations.abstractcore.structured_output import prepare_response_model
101
+
102
+ return prepare_response_model(schema, name=str(params.get("response_schema_name") or "StructuredOutput"))
103
+
104
+
87
105
  def _accepts_null(schema: Any) -> bool:
88
106
  if not isinstance(schema, dict):
89
107
  return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractnote
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: AbstractNote: one endpoint for your notes; a temporal semantic knowledge graph of your life, built on AbstractGateway, AbstractRuntime and AbstractMemory
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  License-Expression: MIT
@@ -45,9 +45,13 @@ runtime and one notebook per user, app hosting), **AbstractRuntime** and **Abstr
45
45
  capture and understanding workflows), **AbstractMemory** (temporal facts) and **AbstractCore**
46
46
  (models, structured output, embeddings).
47
47
 
48
- Status: version 0.2.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
48
+ Status: version 0.3.0, alpha. The Python package is `abstractnote` on PyPI and the web app is
49
49
  `@abstractframework/note` on npm (see [Install](#install)).
50
50
 
51
+ What's new in 0.3.0: the web app follows runs through the gateway's replay view and says when a run waits
52
+ for an answer, the top bar carries the shared Docs assistant and one account widget, and Capture uses the
53
+ shared composer. See [CHANGELOG.md](CHANGELOG.md#030---2026-11-02).
54
+
51
55
  ## What you get
52
56
 
53
57
  - **Capture anywhere**: the web app, the Apple Watch app, the `abstractnote` command line, and
File without changes
File without changes