projectdavid-orm 1.11.0__tar.gz → 1.13.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 (26) hide show
  1. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/CHANGELOG.md +14 -0
  2. {projectdavid_orm-1.11.0/src/projectdavid_orm.egg-info → projectdavid_orm-1.13.0}/PKG-INFO +1 -1
  3. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/pyproject.toml +1 -1
  4. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/projectdavid_orm/models.py +82 -0
  5. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0/src/projectdavid_orm.egg-info}/PKG-INFO +1 -1
  6. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/LICENSE +0 -0
  7. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/MANIFEST.in +0 -0
  8. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/README.md +0 -0
  9. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/setup.cfg +0 -0
  10. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/PKG-INFO +0 -0
  11. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/SOURCES.txt +0 -0
  12. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/dependency_links.txt +0 -0
  13. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/entry_points.txt +0 -0
  14. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/requires.txt +0 -0
  15. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_common.egg-info/top_level.txt +0 -0
  16. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/__init__.py +0 -0
  17. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/constants/__init__.py +0 -0
  18. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/ormInterface.py +0 -0
  19. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/projectdavid_orm/__init__.py +0 -0
  20. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/projectdavid_orm/base.py +0 -0
  21. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm/utilities/__init__.py +0 -0
  22. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm.egg-info/SOURCES.txt +0 -0
  23. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm.egg-info/dependency_links.txt +0 -0
  24. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm.egg-info/requires.txt +0 -0
  25. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/src/projectdavid_orm.egg-info/top_level.txt +0 -0
  26. {projectdavid_orm-1.11.0 → projectdavid_orm-1.13.0}/tests/test_clients.py +0 -0
@@ -1,3 +1,17 @@
1
+ # [1.13.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.12.0...v1.13.0) (2026-09-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * **schema:** add thread-associated scratchpad resource ([5e8d87c](https://github.com/project-david-ai/projectdavid-orm/commit/5e8d87c6641b4eed245feb42c373c91bd643cfc3))
7
+
8
+ # [1.12.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.11.0...v1.12.0) (2026-09-28)
9
+
10
+
11
+ ### Features
12
+
13
+ * **schema:** add canonical message sequence ordering ([ca58196](https://github.com/project-david-ai/projectdavid-orm/commit/ca581964f244a704bd2dd8e7f8bacb65a24ee6d7))
14
+
1
15
  # [1.11.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.10.0...v1.11.0) (2026-09-27)
2
16
 
3
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid-orm
3
- Version: 1.11.0
3
+ Version: 1.13.0
4
4
  Summary: Shared SQLAlchemy ORM models for ProjectDavid services
5
5
  Author-email: "Francis N." <engineering@projectdavid.co.uk>
6
6
  License: PolyForm Noncommercial License 1.0.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "projectdavid-orm"
7
- version = "1.11.0"
7
+ version = "1.13.0"
8
8
  description = "Shared SQLAlchemy ORM models for ProjectDavid services"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -9,6 +9,7 @@ from projectdavid_common.utilities.logging_service import LoggingUtility
9
9
  from sqlalchemy import JSON, BigInteger, Boolean, Column, DateTime
10
10
  from sqlalchemy import Enum as SAEnum
11
11
  from sqlalchemy import (
12
+ FetchedValue,
12
13
  Float,
13
14
  ForeignKey,
14
15
  Index,
@@ -194,6 +195,12 @@ class User(Base):
194
195
  lazy="select",
195
196
  )
196
197
 
198
+ scratchpads = relationship(
199
+ "Scratchpad",
200
+ back_populates="owner",
201
+ lazy="select",
202
+ )
203
+
197
204
  __table_args__ = (
198
205
  UniqueConstraint(
199
206
  "oauth_provider", "provider_user_id", name="uq_user_oauth_provider_id"
@@ -268,6 +275,72 @@ class Thread(Base):
268
275
  )
269
276
  owner = relationship("User", foreign_keys=[owner_id], lazy="select")
270
277
 
278
+ scratchpad = relationship(
279
+ "Scratchpad",
280
+ back_populates="thread",
281
+ uselist=False,
282
+ cascade="all, delete-orphan",
283
+ single_parent=True,
284
+ lazy="select",
285
+ )
286
+
287
+
288
+ class Scratchpad(Base):
289
+ """Tenant-owned working-memory resource associated with one thread."""
290
+
291
+ __tablename__ = "scratchpads"
292
+
293
+ id = Column(String(64), primary_key=True, index=True)
294
+
295
+ owner_id = Column(
296
+ String(64),
297
+ ForeignKey("users.id", ondelete="CASCADE"),
298
+ nullable=False,
299
+ )
300
+
301
+ thread_id = Column(
302
+ String(64),
303
+ ForeignKey("threads.id", ondelete="CASCADE"),
304
+ nullable=False,
305
+ )
306
+
307
+ created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
308
+ updated_at = Column(
309
+ DateTime,
310
+ nullable=False,
311
+ default=datetime.utcnow,
312
+ onupdate=datetime.utcnow,
313
+ )
314
+
315
+ meta_data = Column(
316
+ MutableDict.as_mutable(JSON),
317
+ nullable=False,
318
+ default=dict,
319
+ )
320
+
321
+ owner = relationship(
322
+ "User",
323
+ back_populates="scratchpads",
324
+ lazy="select",
325
+ )
326
+
327
+ thread = relationship(
328
+ "Thread",
329
+ back_populates="scratchpad",
330
+ lazy="select",
331
+ )
332
+
333
+ __table_args__ = (
334
+ UniqueConstraint(
335
+ "thread_id",
336
+ name="uq_scratchpads_thread_id",
337
+ ),
338
+ Index(
339
+ "idx_scratchpads_owner_id",
340
+ "owner_id",
341
+ ),
342
+ )
343
+
271
344
 
272
345
  class Message(Base):
273
346
  __tablename__ = "messages"
@@ -294,6 +367,15 @@ class Message(Base):
294
367
  comment="For messages with role='tool', this links back to the specific tool_call_id.",
295
368
  )
296
369
 
370
+ sequence_no = Column(
371
+ BigInteger,
372
+ nullable=False,
373
+ unique=True,
374
+ index=True,
375
+ server_default=FetchedValue(),
376
+ comment="Canonical monotonic persistence order for conversation messages.",
377
+ )
378
+
297
379
  created_at = Column(Integer, nullable=False)
298
380
  incomplete_at = Column(Integer, nullable=True)
299
381
  incomplete_details = Column(JSON, nullable=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid-orm
3
- Version: 1.11.0
3
+ Version: 1.13.0
4
4
  Summary: Shared SQLAlchemy ORM models for ProjectDavid services
5
5
  Author-email: "Francis N." <engineering@projectdavid.co.uk>
6
6
  License: PolyForm Noncommercial License 1.0.0