@undefineds.co/models 0.2.12 → 0.2.13

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.
@@ -1,3 +1,22 @@
1
+ export declare function buildApprovalSubjectPath(approvalId: string, createdAt?: Date | string | number): string;
2
+ export declare const approvalResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
3
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
4
+ session: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
5
+ toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
6
+ toolName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
7
+ target: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
8
+ action: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
9
+ risk: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
10
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
11
+ assignedTo: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
12
+ decisionBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
13
+ decisionRole: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
14
+ onBehalfOf: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
15
+ reason: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
16
+ policyVersion: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
17
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
18
+ resolvedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
19
+ }>>;
1
20
  export declare const approvalTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
21
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
22
  session: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
@@ -16,6 +35,6 @@ export declare const approvalTable: import("@undefineds.co/drizzle-solid/dist/co
16
35
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
17
36
  resolvedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
18
37
  }>>;
19
- export type ApprovalRow = typeof approvalTable.$inferSelect;
20
- export type ApprovalInsert = typeof approvalTable.$inferInsert;
21
- export type ApprovalUpdate = typeof approvalTable.$inferUpdate;
38
+ export type ApprovalRow = typeof approvalResource.$inferSelect;
39
+ export type ApprovalInsert = typeof approvalResource.$inferInsert;
40
+ export type ApprovalUpdate = typeof approvalResource.$inferUpdate;
@@ -1,7 +1,15 @@
1
1
  import { podTable, uri, string, text, timestamp, id } from '@undefineds.co/drizzle-solid';
2
2
  import { ODRL, UDFS, DCTerms } from './namespaces.js';
3
- // Approval request domain store (separate from Solid inbox notifications)
4
- export const approvalTable = podTable('approval', {
3
+ export function buildApprovalSubjectPath(approvalId, createdAt = new Date()) {
4
+ const date = createdAt instanceof Date ? createdAt : new Date(createdAt);
5
+ const safeDate = Number.isFinite(date.getTime()) ? date : new Date();
6
+ const yyyy = String(safeDate.getUTCFullYear());
7
+ const mm = String(safeDate.getUTCMonth() + 1).padStart(2, '0');
8
+ const dd = String(safeDate.getUTCDate()).padStart(2, '0');
9
+ return `/.data/approvals/${yyyy}/${mm}/${dd}.ttl#${encodeURIComponent(approvalId)}`;
10
+ }
11
+ // Approval request resource (separate from Solid inbox notifications).
12
+ export const approvalResource = podTable('approval', {
5
13
  id: id('id'),
6
14
  // Relations
7
15
  session: uri('session').predicate(UDFS.session).notNull(),
@@ -29,5 +37,7 @@ export const approvalTable = podTable('approval', {
29
37
  sparqlEndpoint: '/.data/approvals/-/sparql',
30
38
  type: UDFS.ApprovalRequest,
31
39
  namespace: UDFS,
32
- subjectTemplate: '{id}.ttl',
40
+ subjectTemplate: '{yyyy}/{MM}/{dd}.ttl#{id}',
33
41
  });
42
+ // Compatibility alias. New model code should prefer `approvalResource`.
43
+ export const approvalTable = approvalResource;
@@ -1,3 +1,18 @@
1
+ export declare const auditResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ action: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
4
+ actor: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
5
+ actorRole: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
6
+ onBehalfOf: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
7
+ session: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
8
+ toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
9
+ approval: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
10
+ context: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
11
+ policy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
12
+ policyVersion: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
13
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
14
+ }>>;
15
+ export declare function buildAuditSubjectPath(auditId: string, createdAt?: Date | string | number): string;
1
16
  export declare const auditTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
17
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
18
  action: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
@@ -12,6 +27,6 @@ export declare const auditTable: import("@undefineds.co/drizzle-solid/dist/core/
12
27
  policyVersion: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
13
28
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
14
29
  }>>;
15
- export type AuditRow = typeof auditTable.$inferSelect;
16
- export type AuditInsert = typeof auditTable.$inferInsert;
17
- export type AuditUpdate = typeof auditTable.$inferUpdate;
30
+ export type AuditRow = typeof auditResource.$inferSelect;
31
+ export type AuditInsert = typeof auditResource.$inferInsert;
32
+ export type AuditUpdate = typeof auditResource.$inferUpdate;
@@ -1,7 +1,9 @@
1
1
  import { podTable, uri, string, text, timestamp, id } from '@undefineds.co/drizzle-solid';
2
2
  import { UDFS, DCTerms } from './namespaces.js';
3
- // Append-only audit log (separate from Solid inbox notifications)
4
- export const auditTable = podTable('audit', {
3
+ // Append-only audit entry resource (separate from Solid inbox notifications).
4
+ // Audit entries are independent events; session/chat/thread are optional relations,
5
+ // not storage ownership boundaries.
6
+ export const auditResource = podTable('audit', {
5
7
  id: id('id'),
6
8
  // Audit action
7
9
  action: string('action').predicate(UDFS.action).notNull(),
@@ -21,9 +23,19 @@ export const auditTable = podTable('audit', {
21
23
  // Timestamps
22
24
  createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),
23
25
  }, {
24
- base: '/.data/audit/',
25
- sparqlEndpoint: '/.data/audit/-/sparql',
26
+ base: '/.data/audits/',
27
+ sparqlEndpoint: '/.data/audits/-/sparql',
26
28
  type: UDFS.AuditEntry,
27
29
  namespace: UDFS,
28
- subjectTemplate: '{id}.ttl',
30
+ subjectTemplate: '{yyyy}/{MM}/{dd}.ttl#{id}',
29
31
  });
32
+ export function buildAuditSubjectPath(auditId, createdAt = new Date()) {
33
+ const date = createdAt instanceof Date ? createdAt : new Date(createdAt);
34
+ const safeDate = Number.isFinite(date.getTime()) ? date : new Date();
35
+ const yyyy = String(safeDate.getUTCFullYear());
36
+ const mm = String(safeDate.getUTCMonth() + 1).padStart(2, '0');
37
+ const dd = String(safeDate.getUTCDate()).padStart(2, '0');
38
+ return `/.data/audits/${yyyy}/${mm}/${dd}.ttl#${encodeURIComponent(auditId)}`;
39
+ }
40
+ // Compatibility alias. New model code should prefer `auditResource`.
41
+ export const auditTable = auditResource;
@@ -1,3 +1,17 @@
1
+ export declare function buildGrantSubjectPath(grantId: string): string;
2
+ export declare const grantResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
3
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
4
+ rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
5
+ target: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
6
+ action: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
7
+ effect: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
8
+ riskCeiling: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
9
+ decisionBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
10
+ decisionRole: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
11
+ onBehalfOf: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
12
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
13
+ revokedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
14
+ }>>;
1
15
  export declare const grantTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
16
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
17
  rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
@@ -11,6 +25,6 @@ export declare const grantTable: import("@undefineds.co/drizzle-solid/dist/core/
11
25
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
12
26
  revokedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
13
27
  }>>;
14
- export type GrantRow = typeof grantTable.$inferSelect;
15
- export type GrantInsert = typeof grantTable.$inferInsert;
16
- export type GrantUpdate = typeof grantTable.$inferUpdate;
28
+ export type GrantRow = typeof grantResource.$inferSelect;
29
+ export type GrantInsert = typeof grantResource.$inferInsert;
30
+ export type GrantUpdate = typeof grantResource.$inferUpdate;
@@ -1,8 +1,11 @@
1
1
  import { podTable, uri, string, timestamp, id } from '@undefineds.co/drizzle-solid';
2
2
  import { RDF, ODRL, UDFS, DCTerms } from './namespaces.js';
3
- // Persistent delegation grants generated by "do not ask again" decisions.
3
+ export function buildGrantSubjectPath(grantId) {
4
+ return `/settings/autonomy/grants.ttl#${encodeURIComponent(grantId)}`;
5
+ }
6
+ // Persistent delegation grant resource generated by "do not ask again" decisions.
4
7
  // This is the durable "delegation" layer (distinct from one-off approvals and append-only audit entries).
5
- export const grantTable = podTable('grant', {
8
+ export const grantResource = podTable('grant', {
6
9
  id: id('id'),
7
10
  // Table-level type writes odrl:Policy. Keep the project-specific class as
8
11
  // an additional rdf:type, so readback treats RDF class membership as multi-valued.
@@ -21,9 +24,10 @@ export const grantTable = podTable('grant', {
21
24
  createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),
22
25
  revokedAt: timestamp('revokedAt').predicate(UDFS.revokedAt),
23
26
  }, {
24
- base: '/settings/autonomy/grants/',
25
- sparqlEndpoint: '/settings/autonomy/grants/-/sparql',
27
+ base: '/settings/autonomy/grants.ttl',
26
28
  type: ODRL.Policy,
27
29
  namespace: ODRL,
28
- subjectTemplate: '{id}.ttl',
30
+ subjectTemplate: '#{id}',
29
31
  });
32
+ // Compatibility alias. New model code should prefer `grantResource`.
33
+ export const grantTable = grantResource;
@@ -1,5 +1,6 @@
1
1
  export declare const inboxNotificationTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
2
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
3
4
  actor: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
4
5
  object: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
5
6
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
@@ -1,8 +1,11 @@
1
1
  import { podTable, uri, timestamp, id } from '@undefineds.co/drizzle-solid';
2
- import { AS, DCTerms } from './namespaces.js';
2
+ import { AS, DCTerms, RDF } from './namespaces.js';
3
3
  // Solid inbox notifications (protocol channel)
4
4
  export const inboxNotificationTable = podTable('inbox_notification', {
5
5
  id: id('id'),
6
+ // Protocol inbox messages are not always Announce. Keep rdf:type writable so
7
+ // app notifications can use as:Announce while other Solid inbox payloads keep their own type.
8
+ rdfType: uri('rdfType').array().predicate(RDF.type).notNull().default([AS.Announce]),
6
9
  // Standard ActivityStreams envelope
7
10
  actor: uri('actor').predicate(AS.actor),
8
11
  object: uri('object').predicate(AS.object).notNull(),
@@ -10,7 +13,7 @@ export const inboxNotificationTable = podTable('inbox_notification', {
10
13
  }, {
11
14
  base: '/inbox/',
12
15
  sparqlEndpoint: '/inbox/-/sparql',
13
- type: AS.Announce,
16
+ type: AS.Activity,
14
17
  namespace: AS,
15
18
  subjectTemplate: '{id}.ttl',
16
19
  });
package/dist/index.d.ts CHANGED
@@ -20,11 +20,11 @@ export { settingsTable, SETTING_KEYS, type SettingKey, type SettingsRow, type Se
20
20
  export { agentTable, type AgentRow, type AgentInsert, type AgentUpdate, } from './agent.schema';
21
21
  export { agentRepository } from './agent.repository';
22
22
  export { DEFAULT_AGENT_PROVIDERS, type AgentProviderMetadata, type AgentModelOption, } from './agent.providers';
23
- export { sessionResource, sessionTable, type SessionType, type SessionStatus, type SessionRow, type SessionInsert, type SessionUpdate, } from './session';
23
+ export { sessionResource, sessionTable, buildSessionSubjectPath, type SessionType, type SessionStatus, type SessionRow, type SessionInsert, type SessionUpdate, } from './session';
24
24
  export { sessionRepository } from './session.repository';
25
- export { approvalTable, type ApprovalRow, type ApprovalInsert, type ApprovalUpdate, } from './approval.schema';
26
- export { auditTable, type AuditRow, type AuditInsert, type AuditUpdate, } from './audit.schema';
27
- export { grantTable, type GrantRow, type GrantInsert, type GrantUpdate, } from './grant.schema';
25
+ export { approvalResource, approvalTable, buildApprovalSubjectPath, type ApprovalRow, type ApprovalInsert, type ApprovalUpdate, } from './approval.schema';
26
+ export { auditResource, auditTable, buildAuditSubjectPath, type AuditRow, type AuditInsert, type AuditUpdate, } from './audit.schema';
27
+ export { grantResource, grantTable, buildGrantSubjectPath, type GrantRow, type GrantInsert, type GrantUpdate, } from './grant.schema';
28
28
  export { inboxNotificationTable, type InboxNotificationRow, type InboxNotificationInsert, type InboxNotificationUpdate, } from './inbox-notification.schema';
29
29
  export { ApprovalVocab, AuditVocab, GrantVocab, InboxNotificationVocab } from './vocab/sidecar.vocab';
30
30
  export * from './sidecar/sidecar-events';
package/dist/index.js CHANGED
@@ -49,12 +49,12 @@ export { DEFAULT_AGENT_PROVIDERS, } from './agent.providers.js';
49
49
  // 其他模型
50
50
  // ============================================
51
51
  // Session - 会话管理
52
- export { sessionResource, sessionTable, } from './session/index.js';
52
+ export { sessionResource, sessionTable, buildSessionSubjectPath, } from './session/index.js';
53
53
  export { sessionRepository } from './session.repository.js';
54
54
  // Approval / Audit / Grant / Inbox Notification
55
- export { approvalTable, } from './approval.schema.js';
56
- export { auditTable, } from './audit.schema.js';
57
- export { grantTable, } from './grant.schema.js';
55
+ export { approvalResource, approvalTable, buildApprovalSubjectPath, } from './approval.schema.js';
56
+ export { auditResource, auditTable, buildAuditSubjectPath, } from './audit.schema.js';
57
+ export { grantResource, grantTable, buildGrantSubjectPath, } from './grant.schema.js';
58
58
  export { inboxNotificationTable, } from './inbox-notification.schema.js';
59
59
  // Sidecar vocab + runtime contracts
60
60
  export { ApprovalVocab, AuditVocab, GrantVocab, InboxNotificationVocab } from './vocab/sidecar.vocab.js';
@@ -81,6 +81,7 @@ export const WF = createNamespace('wf', 'http://www.w3.org/2005/01/wf/flow-1.0#'
81
81
  });
82
82
  // Activity Streams 2.0 - W3C standard for social web
83
83
  export const AS = createNamespace('as', 'https://www.w3.org/ns/activitystreams#', {
84
+ Activity: 'Activity',
84
85
  Announce: 'Announce',
85
86
  Public: 'Public',
86
87
  audience: 'audience',
package/dist/schema.d.ts CHANGED
@@ -190,7 +190,7 @@ export declare const solidResources: {
190
190
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
191
191
  modifiedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
192
192
  }>>;
193
- approvalTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
193
+ approvalResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
194
194
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
195
195
  session: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
196
196
  toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
@@ -208,7 +208,7 @@ export declare const solidResources: {
208
208
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
209
209
  resolvedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
210
210
  }>>;
211
- auditTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
211
+ auditResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
212
212
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
213
213
  action: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
214
214
  actor: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
@@ -222,7 +222,7 @@ export declare const solidResources: {
222
222
  policyVersion: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
223
223
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
224
224
  }>>;
225
- grantTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
225
+ grantResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
226
226
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
227
227
  rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
228
228
  target: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
@@ -237,6 +237,7 @@ export declare const solidResources: {
237
237
  }>>;
238
238
  inboxNotificationTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
239
239
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
240
+ rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
240
241
  actor: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
241
242
  object: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
242
243
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
@@ -481,6 +482,7 @@ export declare const solidSchema: {
481
482
  }>>;
482
483
  inboxNotificationTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
483
484
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
485
+ rdfType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", true, true>;
484
486
  actor: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
485
487
  object: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
486
488
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
package/dist/schema.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { agentTable } from './agent.schema.js';
2
- import { approvalTable } from './approval.schema.js';
3
- import { auditTable } from './audit.schema.js';
2
+ import { approvalResource, approvalTable } from './approval.schema.js';
3
+ import { auditResource, auditTable } from './audit.schema.js';
4
4
  import { aiModelTable } from './ai-model.schema.js';
5
5
  import { aiProviderTable } from './ai-provider.schema.js';
6
6
  import { chatResource, chatTable } from './chat.schema.js';
@@ -8,7 +8,7 @@ import { contactTable } from './contact.schema.js';
8
8
  import { credentialTable } from './credential.schema.js';
9
9
  import { favoriteTable } from './favorite/favorite.schema.js';
10
10
  import { fileTable } from './file/file.schema.js';
11
- import { grantTable } from './grant.schema.js';
11
+ import { grantResource, grantTable } from './grant.schema.js';
12
12
  import { inboxNotificationTable } from './inbox-notification.schema.js';
13
13
  import { messageResource, messageTable } from './message.schema.js';
14
14
  import { solidProfileTable } from './profile.schema.js';
@@ -30,9 +30,9 @@ export const solidResources = {
30
30
  favoriteTable,
31
31
  settingsTable,
32
32
  // Sidecar collaboration data
33
- approvalTable,
34
- auditTable,
35
- grantTable,
33
+ approvalResource,
34
+ auditResource,
35
+ grantResource,
36
36
  inboxNotificationTable,
37
37
  };
38
38
  // Compatibility schema for existing drizzle-solid call sites.
@@ -1 +1 @@
1
- export { sessionResource, sessionTable, type SessionType, type SessionStatus, type SessionRow, type SessionInsert, type SessionUpdate, } from './session.schema';
1
+ export { sessionResource, sessionTable, buildSessionSubjectPath, type SessionType, type SessionStatus, type SessionRow, type SessionInsert, type SessionUpdate, } from './session.schema';
@@ -1 +1 @@
1
- export { sessionResource, sessionTable, } from './session.schema.js';
1
+ export { sessionResource, sessionTable, buildSessionSubjectPath, } from './session.schema.js';
@@ -1,5 +1,6 @@
1
1
  export type SessionType = 'direct' | 'group' | 'imported-readonly';
2
2
  export type SessionStatus = 'active' | 'paused' | 'completed' | 'error' | 'archived';
3
+ export declare function buildSessionSubjectPath(sessionId: string, createdAt?: Date | string | number): string;
3
4
  /**
4
5
  * Runtime / collaboration session resource.
5
6
  *
@@ -10,7 +11,7 @@ export type SessionStatus = 'active' | 'paused' | 'completed' | 'error' | 'archi
10
11
  * - the durable conversation timeline, which is Thread
11
12
  *
12
13
  * Storage structure:
13
- * - Location: /.data/session/{id}.ttl
14
+ * - Location: /.data/sessions/{yyyy}/{MM}.ttl#{id}
14
15
  * - Primary use: runtime lifecycle projection for a concrete Thread
15
16
  *
16
17
  * Contract notes:
@@ -2,6 +2,13 @@ import { object, podTable, string, timestamp, uri, id, integer } from '@undefine
2
2
  import { DCTerms, UDFS } from '../namespaces.js';
3
3
  import { chatResource } from '../chat.schema.js';
4
4
  import { threadResource } from '../thread.schema.js';
5
+ export function buildSessionSubjectPath(sessionId, createdAt = new Date()) {
6
+ const date = createdAt instanceof Date ? createdAt : new Date(createdAt);
7
+ const safeDate = Number.isFinite(date.getTime()) ? date : new Date();
8
+ const yyyy = String(safeDate.getUTCFullYear());
9
+ const mm = String(safeDate.getUTCMonth() + 1).padStart(2, '0');
10
+ return `/.data/sessions/${yyyy}/${mm}.ttl#${encodeURIComponent(sessionId)}`;
11
+ }
5
12
  /**
6
13
  * Runtime / collaboration session resource.
7
14
  *
@@ -12,7 +19,7 @@ import { threadResource } from '../thread.schema.js';
12
19
  * - the durable conversation timeline, which is Thread
13
20
  *
14
21
  * Storage structure:
15
- * - Location: /.data/session/{id}.ttl
22
+ * - Location: /.data/sessions/{yyyy}/{MM}.ttl#{id}
16
23
  * - Primary use: runtime lifecycle projection for a concrete Thread
17
24
  *
18
25
  * Contract notes:
@@ -42,11 +49,11 @@ export const sessionResource = podTable('session', {
42
49
  updatedAt: timestamp('updatedAt').predicate(DCTerms.modified).notNull().defaultNow(),
43
50
  archivedAt: timestamp('archivedAt').predicate(UDFS.archivedAt),
44
51
  }, {
45
- base: '/.data/session/',
46
- sparqlEndpoint: '/.data/session/-/sparql',
52
+ base: '/.data/sessions/',
53
+ sparqlEndpoint: '/.data/sessions/-/sparql',
47
54
  type: UDFS.term('Session'),
48
55
  namespace: UDFS,
49
- subjectTemplate: '{id}.ttl',
56
+ subjectTemplate: '{yyyy}/{MM}.ttl#{id}',
50
57
  });
51
58
  // Compatibility alias. New model code should prefer `sessionResource`.
52
59
  export const sessionTable = sessionResource;
@@ -27,10 +27,11 @@ export const settingsTable = podTable("settings", {
27
27
  createdAt: timestamp("createdAt").predicate(DCTerms.created).notNull().defaultNow(),
28
28
  modifiedAt: timestamp("modifiedAt").predicate(DCTerms.modified).notNull().defaultNow(),
29
29
  }, {
30
- base: "idp:///settings/", // LDP Container
31
- sparqlEndpoint: "idp:///settings/-/sparql",
30
+ base: "/settings/", // LDP Container
31
+ sparqlEndpoint: "/settings/-/sparql",
32
32
  type: SCHEMA.PropertyValue,
33
33
  namespace: UDFS,
34
+ subjectTemplate: "{key}.ttl",
34
35
  });
35
36
  /**
36
37
  * 常用设置键定义
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/models",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {