KnowledgeMar 8, 2026, 6:16:02 AM

GraphQL API — рабочие шаблоны

⚠️ ЖЁСТКОЕ ПРАВИЛО: Никогда не редактировать и не удалять эту запись. Только по прямому указанию Николая (id: cmmhc36zh0004nz0pco8ez1zz) и только когда оно касается конкретно этого MindLog.


MindLogType enum values

Action, Conclusion, Context, Correction, Error, Evaluation, Identity, Knowledge, Reaction, Relationship, Result, Stimulus


KBFactStatus enum values

deprecated, disputed, tentative, unverified, verified


Fragments

fragment KBConceptFragment on KBConcept {
  id
  type
  name
  description
}

fragment KBConceptWithDetailsFragment on KBConcept {
  ...KBConceptFragment
  content
  createdAt
  updatedAt
}

fragment KBFactFragment on KBFact {
  id
  type
  statement
  confidence
  importance
  status
  validFrom
  validTo
  createdAt
}

fragment KBFactParticipationFragment on KBFactParticipation {
  id
  factId
  conceptId
  role
  value
  impact
  localImportance
  createdAt
}

fragment KBFactProjectionFragment on KBFactProjection {
  id
  factId
  knowledgeSpaceId
  visibility
  trustLevel
  importance
  notes
  createdAt
}

fragment TaskFragment on Task {
  id
  title
  description
  status
  startDatePlaning
  endDatePlaning
  startDate
  endDate
  assigneeId
  parentId
  createdAt
}

fragment TaskWithDetailsFragment on Task {
  ...TaskFragment
  content
  updatedAt
}

fragment MindLogFragment on MindLog {
  id
  type
  data
  quality
  relatedToUserId
  createdAt
  updatedAt
}

fragment TaskWorkLogFragment on TaskWorkLog {
  id
  content
  taskId
  createdAt
}

fragment World3dStatsFragment on World3dStats {
  worldName
  nodeCount
  snapshotCount
}

World3d

query world3dStats {
  response: world3dStats {
    worldName
    nodeCount
    snapshotCount
  }
}
query world3dScene {
  response: world3dScene
}

World3dObject

query world3dObjectsMap(
  $uuid: String = "root"
) {
  response: world3dObjectsMap(
    uuid: $uuid
  )
}

Параметры:

  • uuid: String — UUID объекта Three.js (по умолчанию "root" для корня сцены)
mutation world3dObjectCreate($data: World3dObjectCreateInput!) {
  response: world3dObjectCreate(data: $data)
}

World3dObjectCreateInput:

  • parentId: String (default: "root")
  • object: JSON!
mutation world3dObjectUpdate(
  $where: World3dObjectWhereUniqueInput!
  $data: World3dObjectUpdateInput!
) {
  response: world3dObjectUpdate(where: $where, data: $data)
}

World3dObjectWhereUniqueInput:

  • uuid: String! — UUID объекта Three.js (поле uuid из JSON сцены)

World3dObjectUpdateInput:

  • object: JSON!

Примечание: Нативный Three.js объект (matrix, position, rotation, scale, children, userData и т.д.). При update выполняется partial merge — обновляются только переданные свойства, children сохраняются.

mutation world3dObjectDelete($uuid: String!, $cascade: Boolean = false) {
  response: world3dObjectDelete(uuid: $uuid, cascade: $cascade)
}

KBConcept

query myConcepts(
  $where: KBConceptWhereInput
  $orderBy: KBConceptOrderByInput
  $skip: Int
  $take: Int
  $withDetails: Boolean = false
) {
  response: myConcepts(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBConceptFragment
    ... @include(if: $withDetails) {
      content
      createdAt
      updatedAt
    }
  }
}

KBConceptWhereInput: ids, type, name KBConceptOrderByInput: createdAt, name, type (SortOrder)

mutation createConcept($data: KBConceptCreateInput!) {
  response: createConcept(data: $data) {
    ...KBConceptFragment
  }
}

KBConceptCreateInput: name!, type!, description, content

mutation updateConcept($id: String!, $data: KBConceptUpdateInput!) {
  response: updateConcept(id: $id, data: $data) {
    ...KBConceptWithDetailsFragment
  }
}
mutation deleteConcept($id: String!) {
  response: deleteConcept(id: $id) {
    id
  }
}

KBFact

query myFacts(
  $where: KBFactWhereInput
  $orderBy: KBFactOrderByInput
  $skip: Int
  $take: Int
) {
  response: myFacts(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBFactFragment
  }
}

KBFactWhereInput: type (String, НЕ объект!), status, confidence, importance, validFrom, validTo ⚠️ Поля ids НЕ существует в KBFactWhereInput! ⚠️ type передаётся как обычная строка: type: "Claim", НЕ как { equals: "Claim" } KBFactOrderByInput: createdAt, validFrom, confidence, importance

mutation createFact($data: KBFactCreateInput!) {
  response: createFact(data: $data) {
    ...KBFactFragment
  }
}

KBFactCreateInput: type!, statement!, validFrom, validTo, confidence, importance, source, status

mutation updateFact($id: String!, $data: KBFactUpdateInput!) {
  response: updateFact(id: $id, data: $data) {
    ...KBFactFragment
  }
}

⚠️ ДОГМА: updateFact использовать ТОЛЬКО для изменения validTo (устаревание факта). НЕЛЬЗЯ менять: statement, confidence, importance, status — это разрушает механизм работы с возражениями и историю. При противоречии → создать новый факт. Анализировать: источник и его достоверность, ошибки в системе оценок.

mutation deleteFact($id: String!) {
  response: deleteFact(id: $id) {
    id
  }
}

KBFactParticipation

Связь факта с концептом. Обязательна при создании фактов, если факт касается конкретных концептов. Один факт может участвовать в нескольких концептах с разными ролями.

query myFactParticipations(
  $where: KBFactParticipationWhereInput
  $orderBy: KBFactParticipationOrderByInput
  $skip: Int
  $take: Int
) {
  response: myFactParticipations(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBFactParticipationFragment
  }
}

KBFactParticipationWhereInput: factId, conceptId, role, impact KBFactParticipationOrderByInput: createdAt, role (SortOrder)

mutation createFactParticipation($data: KBFactParticipationCreateInput!) {
  response: createFactParticipation(data: $data) {
    ...KBFactParticipationFragment
  }
}

KBFactParticipationCreateInput: factId!, conceptId!, role!, value, impact, localImportance

mutation updateFactParticipation($id: String!, $data: KBFactParticipationUpdateInput!) {
  response: updateFactParticipation(id: $id, data: $data) {
    ...KBFactParticipationFragment
  }
}

KBFactParticipationUpdateInput: role, value, impact, localImportance

mutation deleteFactParticipation($id: String!) {
  response: deleteFactParticipation(id: $id)
}

KBFactProjection

⚠️ Сейчас не использовать — пространство знаний одно (публичное), смысла нет.


Task

query tasks(
  $where: TaskWhereInput
  $orderBy: TaskOrderByInput
  $skip: Int
  $take: Int
  $withDetails: Boolean = false
) {
  response: tasks(where: $where, orderBy: $orderBy, skip: $skip, take: $take) {
    ...TaskFragment
    ... @include(if: $withDetails) {
      content
      updatedAt
    }
  }
}

TaskWhereInput: status, parentId, incompletedOnly TaskOrderByInput: createdAt (SortOrder)

mutation createTask($data: TaskCreateInput!) {
  response: createTask(data: $data) {
    ...TaskFragment
  }
}

TaskCreateInput: title!, description, content, startDatePlaning, endDatePlaning, parentId

mutation updateTask($where: TaskWhereUniqueInput!, $data: TaskUpdateInput!) {
  response: updateTask(where: $where, data: $data) {
    ...TaskWithDetailsFragment
  }
}

TaskWhereUniqueInput: id! TaskUpdateInput: title, description, content, status, startDatePlaning, endDatePlaning, startDate, endDate

mutation deleteTask($where: TaskWhereUniqueInput!) {
  response: deleteTask(where: $where) {
    id
  }
}

MindLog

query mindLogs($where: MindLogWhereInput, $skip: Int, $take: Int) {
  response: mindLogs(where: $where, skip: $skip, take: $take) {
    ...MindLogFragment
  }
}

MindLogWhereInput:

  • type: MindLogTypeWhereInput (type.equals: String, type.in: [String!])
  • relatedToUserId: String
mutation createMindLog($data: MindLogCreateInput!) {
  response: createMindLog(data: $data) {
    ...MindLogFragment
  }
}

MindLogCreateInput: type!, data!, quality, relatedToUserId

mutation updateMindLog($where: MindLogWhereUniqueInput!, $data: MindLogUpdateInput!) {
  response: updateMindLog(where: $where, data: $data) {
    ...MindLogFragment
  }
}

MindLogWhereUniqueInput: id! MindLogUpdateInput: data, quality

mutation deleteMindLog($where: MindLogWhereUniqueInput!) {
  response: deleteMindLog(where: $where) {
    id
  }
}

TaskWorkLog

query taskWorkLogs(
  $where: TaskWorkLogWhereInput
  $skip: Int
  $take: Int
  $orderBy: TaskWorkLogOrderByInput
) {
  response: taskWorkLogs(
    where: $where
    skip: $skip
    take: $take
    orderBy: $orderBy
  ) {
    ...TaskWorkLogFragment
  }
}

TaskWorkLogWhereInput: taskId TaskWorkLogOrderByInput: createdAt (SortOrder)

mutation createTaskWorkLog($data: TaskWorkLogCreateInput!) {
  response: createTaskWorkLog(data: $data) {
    ...TaskWorkLogFragment
  }
}

TaskWorkLogCreateInput: taskId!, content!

mutation deleteTaskWorkLog($where: TaskWorkLogWhereUniqueInput!) {
  response: deleteTaskWorkLog(where: $where) {
    id
  }
}

TaskWorkLogWhereUniqueInput: id!


Tips and tricks

  • operationName всегда передавать как пустую строку. Только если отправляется GraphQL запрос с несколькими отдельными запросами внутри, только тогда надо указывать явный operationName.

Memory Recall Tool

Под капотом — отдельный ИИ (модель полегче), у которого в контексте вся история вызовов инструментов текущей сессии (параметры + результаты). Запросы можно формулировать в свободной форме на естественном языке. Очень полезен для: восстановления результатов прошлых запросов, поиска ошибок и правильных примеров, анализа паттернов в вызовах.

⚠️ НЕ источник истины — возвращает интерпретацию ИИ, не точные данные. Важные результаты всегда перепроверять отдельным запросом к API.