225 lines
4.8 KiB
YAML
225 lines
4.8 KiB
YAML
types:
|
|
Person:
|
|
required: [name]
|
|
properties:
|
|
name: string
|
|
email: string?
|
|
phone: string?
|
|
organization: ref(Organization)?
|
|
notes: string?
|
|
tags: string[]?
|
|
pronouns: string?
|
|
timezone: string?
|
|
|
|
Organization:
|
|
required: [name]
|
|
properties:
|
|
name: string
|
|
type: enum(company, team, community, government, other)?
|
|
website: url?
|
|
members: ref(Person)[]?
|
|
|
|
Agent:
|
|
required: [id, name]
|
|
properties:
|
|
id: string
|
|
name: string
|
|
type: enum[dev, legal, planner, assistant]
|
|
workspace: string?
|
|
model: string?
|
|
status: enum[active, inactive, planned]
|
|
|
|
Project:
|
|
required: [name]
|
|
properties:
|
|
name: string
|
|
description: string?
|
|
status: enum(planning, active, paused, completed, archived)
|
|
owner: ref(Person)?
|
|
team: ref(Person)[]?
|
|
goals: ref(Goal)[]?
|
|
start_date: date?
|
|
end_date: date?
|
|
folder: string?
|
|
doc_path: string?
|
|
tags: string[]?
|
|
|
|
Task:
|
|
required: [title, status]
|
|
properties:
|
|
title: string
|
|
description: string?
|
|
status: enum(open, in_progress, blocked, done, cancelled)
|
|
priority: enum(low, medium, high, urgent)?
|
|
assignee: ref(Person)?
|
|
project: ref(Project)?
|
|
due: datetime?
|
|
estimate_hours: number?
|
|
folder: string?
|
|
doc_path: string?
|
|
blockers: ref(Task)[]?
|
|
tags: string[]?
|
|
|
|
Goal:
|
|
required: [description]
|
|
properties:
|
|
description: string
|
|
target_date: date?
|
|
status: enum(active, achieved, abandoned)?
|
|
metrics: object[]?
|
|
key_results: string[]?
|
|
|
|
Event:
|
|
required: [title, start]
|
|
properties:
|
|
title: string
|
|
description: string?
|
|
start: datetime
|
|
end: datetime?
|
|
location: ref(Location)?
|
|
attendees: ref(Person)[]?
|
|
recurrence: object?
|
|
status: enum(confirmed, tentative, cancelled)?
|
|
reminders: object[]?
|
|
|
|
Location:
|
|
required: [name]
|
|
properties:
|
|
name: string
|
|
address: string?
|
|
city: string?
|
|
country: string?
|
|
coordinates: object?
|
|
timezone: string?
|
|
|
|
Document:
|
|
required: [title]
|
|
properties:
|
|
title: string
|
|
path: string?
|
|
url: url?
|
|
mime_type: string?
|
|
summary: string?
|
|
content_hash: string?
|
|
tags: string[]?
|
|
|
|
Message:
|
|
required: [content, sender]
|
|
properties:
|
|
content: string
|
|
sender: ref(Person)
|
|
recipients: ref(Person)[]
|
|
thread: ref(Thread)?
|
|
timestamp: datetime
|
|
platform: string?
|
|
external_id: string?
|
|
|
|
Thread:
|
|
required: [subject]
|
|
properties:
|
|
subject: string
|
|
participants: ref(Person)[]
|
|
messages: ref(Message)[]
|
|
status: enum(active, archived)?
|
|
last_activity: datetime?
|
|
|
|
Note:
|
|
required: [content]
|
|
properties:
|
|
content: string
|
|
title: string?
|
|
tags: string[]?
|
|
refs: ref(Entity)[]?
|
|
created: datetime
|
|
|
|
Account:
|
|
required: [service, username]
|
|
properties:
|
|
service: string
|
|
username: string
|
|
url: url?
|
|
credential_ref: ref(Credential)?
|
|
|
|
Device:
|
|
required: [name, type]
|
|
properties:
|
|
name: string
|
|
type: enum(computer, phone, tablet, server, iot, other)
|
|
os: string?
|
|
identifiers: object?
|
|
owner: ref(Person)?
|
|
|
|
Credential:
|
|
required: [service, secret_ref]
|
|
forbidden_properties: [password, secret, token, key, api_key]
|
|
properties:
|
|
service: string
|
|
secret_ref: string
|
|
expires: datetime?
|
|
scope: string[]?
|
|
|
|
Action:
|
|
required: [type, target, timestamp]
|
|
properties:
|
|
type: string
|
|
target: ref(Entity)
|
|
timestamp: datetime
|
|
actor: ref(Person|Agent)?
|
|
outcome: enum(success, failure, pending)?
|
|
details: object?
|
|
|
|
Policy:
|
|
required: [scope, rule]
|
|
properties:
|
|
scope: string
|
|
rule: string
|
|
enforcement: enum(block, warn, log)
|
|
enabled: boolean
|
|
|
|
relations:
|
|
owns:
|
|
from_types: [Person, Organization]
|
|
to_types: [Account, Device, Document, Project]
|
|
cardinality: one_to_many
|
|
|
|
has_owner:
|
|
from_types: [Project, Task, Document]
|
|
to_types: [Person]
|
|
cardinality: many_to_one
|
|
|
|
assigned_to:
|
|
from_types: [Task]
|
|
to_types: [Person]
|
|
cardinality: many_to_one
|
|
|
|
has_task:
|
|
from_types: [Project]
|
|
to_types: [Task]
|
|
cardinality: one_to_many
|
|
|
|
depends_on:
|
|
from_types: [Task]
|
|
to_types: [Task]
|
|
cardinality: many_to_many
|
|
acyclic: true
|
|
|
|
has_agent:
|
|
from_types: [Project, Task, Person]
|
|
to_types: [Agent]
|
|
cardinality: many_to_many
|
|
|
|
uses_service:
|
|
from_types: [Project, Agent]
|
|
to_types: [Service]
|
|
cardinality: many_to_many
|
|
|
|
has_skill:
|
|
from_types: [Agent, Project]
|
|
to_types: [Skill]
|
|
cardinality: many_to_many
|
|
|
|
knows_rule:
|
|
from_types: [Agent]
|
|
to_types: [Rule]
|
|
cardinality: many_to_many
|