AgentSkillsCN

nova-explore

探索NovaDB数据——浏览分支、类型、对象、属性,进行搜索与筛选。当用户想要查询、检查、理解或分析Nova的数据结构时使用此功能。

SKILL.md
--- frontmatter
name: nova-explore
description: Explores NovaDB data — browse branches, types, objects, properties, search, and filter. Use when the user wants to query, inspect, understand, or analyze Nova data structures.

You have access to the NovaDB MCP server tools. This skill covers all read operations via the CMS and Index APIs.

Focused alternatives: Use /nova-search for finding data objects by text/attributes/type. Use /nova-list-branches for listing branches. This skill is best for schema discovery and deep data exploration.

Prefer the Index API for searching and filtering. Use CMS API for fetching specific objects by ID, resolving references, and browsing schema/type definitions. Typical pattern: search with Index API, then resolve details with CMS API.

Discovery Workflow

Schema discovery (CMS API):

  1. Branches: novadb_cms_get_typed_objects(branch="branchDefault", type="typeBranch") — List available branches
  2. Types: novadb_cms_get_typed_objects(branch, type="root") — List object types in a branch
  3. Languages: novadb_cms_get_typed_objects(branch, type="typeLanguage") — Check available languages
  4. Branch details: novadb_cms_get_branch(id=<branchId>) — Get full branch object with all properties

Searching for data (Index API — preferred): 5. Count objects: novadb_index_count_objects(branch, filter={objectTypeIds: [<typeId>]}) — Check result set size before fetching 6. Search objects: novadb_index_search_objects(branch, filter={searchPhrase: "...", objectTypeIds: [...]}) — Find objects by text, attributes, or type 7. Suggestions: novadb_index_suggestions(branch, pattern="...") — Type-ahead / autocomplete

Fetching details (CMS API): 8. Single object: novadb_cms_get_object(branch, id=<objectId>, inherited=true) — Deep-dive into one object with all values 9. Resolve references: novadb_cms_get_objects(branch, ids="<refId1>,<refId2>,...") — Fetch referenced objects separately 10. Browse all of a type: novadb_cms_get_typed_objects(branch, type="<apiIdentifier>") — List objects without filtering (prefer Index API when filtering is needed)

CMS API Data Format

The CMS API returns normalized value tuples, not flat key-value props:

json
{
  "meta": {
    "id": 2099001, "guid": "...", "apiIdentifier": "optionalId",
    "typeRef": 2098900, "lastTransaction": 42, "deleted": false
  },
  "values": [
    { "attribute": 1000, "language": 201, "variant": 0, "value": "English Name" },
    { "attribute": 1000, "language": 202, "variant": 0, "value": "Deutscher Name" },
    { "attribute": 2098950, "language": 0, "variant": 0, "value": 2099050 }
  ]
}
  • attribute — Numeric attribute definition ID (use Universal/System Attribute tables to decode)
  • language — Language ID (0=language-independent, 201=en-US, 202=de-DE)
  • variant — Variant ID (0 for no variant)
  • Use inherited=true to include inherited values (important for getting the full picture)

Resolving References

References (ObjRef) appear as numeric IDs in value. To resolve them:

code
# 1. Fetch the main object
novadb_cms_get_object(branch, id=<objectId>, inherited=true)

# 2. Identify ObjRef values (single numeric ID or array of IDs)
# e.g. { "attribute": 5001, "value": 2098950 }  or  { "attribute": 5002, "value": [2098950, 2098951] }

# 3. Fetch referenced objects in a single call
novadb_cms_get_objects(branch, ids="2098950,2098951")

Branch Inspection

Use novadb_cms_get_branch(id=<branchId>) to fetch a branch as a full CmsObject with all its properties.

Branch-specific attributes (typeBranch):

IDapiIdentifierData TypeNotes
4000branchParentObjRefParent work package
4001branchTypeObjRefWork package type (resolve to see name)
4002branchWorkflowStateObjRefCurrent workflow state (resolve to see name)
4003branchDueDateDateTime.DateDue date
4004branchAssignedToString.UserNameAssigned user

Resolve ObjRef values (4000, 4001, 4002) with novadb_cms_get_objects(branch, ids="...") to get display names.

Pagination (CMS API)

The CMS API uses cursor-based pagination with a continue token:

  • take — Number of items per page (default 20)
  • Response includes a continue token when more results exist
  • Pass the continue token to the next call to get the next page
code
# First page
novadb_cms_get_typed_objects(branch, type="otPeople", take=50)
# Next page (use continue token from response)
novadb_cms_get_typed_objects(branch, type="otPeople", take=50, continue="<token>")

Search & Filtering (Index API — Preferred)

The Index API provides Lucene-powered search with structured filters.

Object Search

  • novadb_index_search_objects(branch, filter?, sortBy?, skip?, take?) — Full-text + filtered search
  • novadb_index_count_objects(branch, filter?) — Count matching objects
  • novadb_index_object_occurrences(branch, filter?) — Facet counts by type, modifiedBy, deleted

Comment Search

  • novadb_index_search_comments(branch, filter?, sortField?, sortReverse?, skip?, take?) — Search by text, author, mentioned user, or object type
  • novadb_index_count_comments(branch, filter?) — Count matching comments

Other Index Tools

  • novadb_index_suggestions(branch, pattern?) — Type-ahead with suggestDisplayName and attribute-specific suggestAttributes. Supports fuzzy matching.
  • novadb_index_work_item_occurrences() — Work items per branch (global endpoint)

Index API Filter Model

json
{
  "filter": {
    "searchPhrase": "search text",
    "objectTypeIds": [2098874],
    "modifiedBy": "username",
    "deleted": false,
    "filters": [
      { "attrId": 1000, "langId": 201, "variantId": 0, "value": "test", "compareOperator": 0 }
    ]
  }
}

Compare operators: 0=Equal, 1=NotEqual, 2=LessThan, 3=LessThanOrEqual, 4=GreaterThan, 5=GreaterThanOrEqual, 6=Wildcard, 7=Ref

Sort options: 0=Score, 1=ObjId, 2=TypeRef, 3=DisplayName, 4=Modified, 5=ModifiedBy, 6=Attribute

Index API Pagination

Uses skip/take (offset-based):

  • take — Number of results (default varies)
  • skip — Offset for paging

Property Data Types

Data TypeExample ValueNotes
String"Hello World"Plain text, may be language-dependent
TextRef"Long description..."Long/rich text
TextRef.JavaScript"function() { ... }"JavaScript code
TextRef.CSS"body { color: #000; }"CSS stylesheet code
XmlRef.SimpleHtml{"XML": "<div>...</div>"}Rich text (XHTML)
XmlRef.VisualDocument{"id": "...", "type": "group", ...}Visual component trees (CMS pages)
Integer42Whole numbers
Decimal3.14Decimal numbers
Booleantrue / falseCheckbox values
DateTime.Date"2026-01-08"Date only
ObjRef2099001 or [2099001, 2099002]Reference(s) to other objects
BinRef.Icon(binary)Icon image upload
BinRef.Thumbnail(binary)Thumbnail image
String.DataType"ObjRef"Enumerated data type selector
String.InheritanceBehavior"None", "Inheriting", "InheritingAll"Inheritance mode
String.UserName"john.doe"User name picker

Properties can be:

  • Language-dependent — Multiple value tuples with different language IDs
  • Multi-valued — Returned as arrays in the value field
  • Virtual — Computed by JavaScript, not stored directly
  • Inherited — Only visible with inherited=true

System Object Types

Core Schema (IDs 0-210):

IDapiIdentifierName
0rootObject Type (meta-type)
10typeAttributeAttribute Definition
11typeAttributeGroupAttribute Group
12typeAttributeMainGroupAttribute Main Group
20typeLanguageLanguage
30typeUnitUnit of Measure
31typeUnitGroupUnit Group
40typeBranchWork Package (branch)
50typeFormForm Definition
60typeApplicationAreaApplication Area
70typeUiStringUI String
80typeWorkflowStateWorkflow State
90typeKanbanBoardKanban Board
100typeMediaTypeMedia Type
120typeJobDefinitionJob Definition
130typePackagePackage
140typeTreeDefinitionTree Definition
150typeRazorViewRazor View
155typeParameterParameter
160typeTriggerDefinitionTrigger Definition
161typeTimerDefinitionTimer Definition
180typeBranchTypeWork Package Type
190typePresentationAsPresentation Type
200typeExternalApiExternal API
210typeWebHookDefinitionWeb Hook Definition

Conditions (IDs 170-176):

IDapiIdentifierName
170typeScriptedConditionScripted Condition
171typeObjectReferenceValueConditionObject Reference Condition
172typeUserNameValueConditionUser Name Condition
173typeStringValueConditionString Condition
174typeNumericValueConditionNumeric Condition
175typeTimestampValueConditionTimestamp Condition
176typeBooleanValueConditionBoolean Condition

Typography & Visual Components (IDs 300-402):

IDapiIdentifierName
300typeParagraphStyleParagraph Style
301typeCascadingStyleSheetCascading Style Sheet
302typeTextAlignmentText Alignment
303typeFontFamilyFont Family
304typeFontFaceFont Face
400typeVisualComponentDefinitionVisual Component
401typeVisualComponentDefinitionGroupVisual Component Group
402typeVisualComponentTypeVisual Component Type

Package-Installed Types (IDs 2098514-2098844):

IDapiIdentifierName
2098514typeCountryCountry
2098769typeImageImage
2098770typePdfDocumentPDF Document
2098833typeSpreadsheetSpreadsheet
2098834typeDocumentDocument
2098835typeAudioDerivativeAudio Derivative
2098836typeImageDerivativeImage Derivative
2098837typeVideoDerivativeVideo Derivative
2098838typePresentationPresentation
2098839typeVideoVideo
2098840typeArchiveArchive
2098841typeAudioAudio
2098842typeMediaRootMediatree Root
2098843typeMediaFolderMedia Tree Folder
2098844typeVideoSubtitlesVideo Subtitles

System Type Attribute Reference

typeLanguage properties:

IDapiIdentifierData TypeNotes
2001attributeIsoLanguageCodeStringISO code, e.g. de-DE, en-US
2002attributeFallbackLanguageObjRefFallback language reference

typeUnit / typeUnitGroup properties:

IDapiIdentifierData TypeNotes
3001unitGroupBaseUnitObjRefBase unit of a unit group
3002unitParentGroupObjRefParent unit group
3003unitSymbolStringLocalized symbol (e.g. cm, kg)
3005unitBaseFactorDecimalConversion factor to base unit

typeApplicationArea properties:

IDapiIdentifierData TypeNotes
6001applicationAreaObjectTypesObjRef (multi)Object types shown in this area
6003applicationAreaSortKeyIntegerSort order for the area

typeBranch (Work Package) properties:

IDapiIdentifierData TypeNotes
4000branchParentObjRefParent work package
4001branchTypeObjRefWork package type
4002branchWorkflowStateObjRefCurrent workflow state
4003branchDueDateDateTime.DateDue date
4004branchAssignedToString.UserNameAssigned user

Visual Content (CMS Pages)

Page objects may contain a websitePageContent property with a nested visual component tree:

json
{
  "id": "...",
  "type": "group",
  "definition": "visualComponentRoot",
  "element": "div",
  "class": "main",
  "children": [
    { "type": "text", "element": "h1", "content": "Headline" },
    { "type": "image", "element": "img", "objectId": 2099102 }
  ]
}

Component types: group (container with children), text (text content), image (media reference via objectId).

Presentation Guidelines

  • Present results in readable tables or summaries, not raw JSON
  • When showing objects with references, resolve and show the referenced display names
  • For large result sets, summarize counts and show representative samples
  • CMS returns all languages at once — present the user's preferred language

Gotchas

  • CMS returns numeric attribute IDs — Use the attribute reference tables above to decode attribute meanings
  • References are numeric IDs — Resolve with a separate novadb_cms_get_objects(branch, ids="...") call
  • Use inherited=true when reading objects to include inherited values
  • CMS pagination uses continue tokens — Not skip/take. Check response for continuation token.
  • Index API pagination uses skip/take — Different from CMS pagination
  • Use IDs or apiIdentifiers for branches, not display names
  • Index API uses structured filters with numeric attribute IDs and compare operators (not string-based filtering syntax)
  • Don't use get_typed_objects to search — It fetches all objects without filtering. Use novadb_index_search_objects to find objects, then novadb_cms_get_object for details.