Manifest
A document detailing what the intent is and guides Linnet to deliver the best user expereance.
Task Chat Branch APIThese details are only updated with each release, for more acurate updates and keeping track of progress, see the task in GitHub.
- Overview
- Research
- User Details
- Development
Team
| Owner | Lead |
|---|---|
| Mendy | Sergey |
Status
| Doc Status | Product Status | Last Update | Version | Release | Phase |
|---|---|---|---|---|---|
| In Progress | Up Next | 04.03.2024 | 0.01 | Internal | Alpha |
Description
Manifest: A Manifest is a static document (authored as YAML) that contains a list of messages, rules, components and actions for the Manifest Executor to execute. The Executor itself holds no messages — it only interprets Manifest documents, which lets new manifests be authored without backend code changes as long as they only reuse already-supported step types, components, actions and YAML fields. A Manifest that references a new target (e.g. NewPaymentCard) still requires implementing that widget in the Flutter client before the Manifest can render it.
Manifest documents are static YAML files in [manifests/] (auth_Manifest.yaml, intro_Manifest.yaml, preference_manifest.yaml), loaded once at startup by ManifestYamlLoader and cached in InMemoryManifestRegistry. Adding or editing a Manifest usually requires only a YAML change and does not require changes to the Manifest Executor code — provided the Manifest only reuses step types, target components and action keys the Flutter client already supports. Because the YAML files are bundled with the backend, the service must currently be redeployed or restarted for the changes to take effect.
Each YAML Manifest maps directly onto the following metadata fields: Manifest_name, auth_required, session_isolation → inline|new_conversation, trigger_type → intent|condition|cta, condition, intents, persistence_mode → save_and_resume|volatile, topics, topic_restriction → no|limited|yes, start → top|anywhere, steps_mode → strict|dynamic, initiation — plus a steps list. A step's type is one of:
text— plain message (content).component— client-rendered UI component (target= component name), optionally with akeyso the Manifest can be entered directly on that card.action— backend action or client-interpreted navigation (actionkey).Manifest— hands off/chains into another Manifest (target= Manifest name).
Example (manifests/preference_manifest.yaml, trimmed):
Add the option to allow Colibri to choose the component, all the dev needs to provide is the data they want to collect or handle.
manifest_name: preference_manifest
trigger_type: intent
intents: [preferences, settings, "set up my account", ...]
persistence_mode: save_and_resume
start: anywhere
steps_mode: dynamic
steps:
- { type: component, key: overview, target: AccountPreferencesCard }
- { type: component, key: last_name, target: PreferenceLastNameCard }
- { type: component, key: address, target: PreferenceAddressCard }
- { type: component, key: date_of_birth, target: PreferenceDateOfBirthCard }
- { type: component, key: citizenship, target: PreferenceCitizenshipCard }
- { type: component, key: tax_details, target: PreferenceTaxDetailsCard }
- { type: component, key: expires, target: PreferenceExpiresCard }
For how these documents get selected, run and delivered to the client at runtime (engine, sessions, API surface, Flutter contract), see the Manifest Executor document.
To Do
- Add the option to detail component position (e.g. com:Nav, Position:bottom left)
- allow devs to give a component decsriotion and use cane to allow Linnet to choose rather than referencing an exact component from the library.
Reminders
Links & Resources
Research
the research listed here is spesifict to the Chat feature, for research related to the general Colibri development see the Research document.
Technical
Question - Can we support more guild types?
Question - Should we allow Colibri to generate its own guilds?
Question - would it make things more simple for devs if they can create a guild using flutter and how do we support such capability?
Answer -
Conclusion - How do we get data from arenas to form the arena layout and map the devices?
Sources
- [test]
Business
User Stories
Persona One
Update Coming Soon
As a developer I do not want to build out the onboarding for my flow, a simple document with the data I need should generate the onboarding for me
Flows
Personas
Development
All details related to how to build or had been built, how to use, etc are here.
- Features
- Phases
- Data
- Implementation
- Endpoint
Dependents
Below is a list of features that will be utilized in order to deliver the Guild Executor and it's functionalities.
The details bellow are not comprehensive feature details but rather, describe how the features will be utilized within the account, for further details, please see the individual feature documentation.
-
Actions
Create an api to allow apps to add thier own actions in the place of the voice and live actions
-
Components
Dependent
These are the feature who repply on the Guide Executor and thier dependents
The details bellow are not comprehensive feature details but rather, describe how the features will utilize the Guild Executor, for further details, please see the individual feature documentation.
Guides
- Intro
- Auth Prompt
- Auth
- Onboarding
- Preferences
Phases
Phase One
- Build the Guided Conversations Feature
- Build the three esencal guids Auth, Preferences
phase Two
On the document we want to keep all the important data, the first fetch and fast to access, all secondary data should be stored on a subcollection and fetch sepratly (if this is cost sfective)
User Accounts should be a top level collection, each account will generate a new document within the "Accounts" collection.
Messages
- Message
- - Message 1
- - - type (offer a fea default options that the client can configure as well as custome options or offer numbered types and allow te client to give each type a title, this will enable the client to offer difrent feature or access levels based on account types)
- - - email
- - - number
- - - legal name (if connected wit a / our identity API this will allow for name/identity varification, useful for saftly and fintech and fraud protection)
- - - age (also opcinaly connect with identity api for varification)
- - - dob (also opcinaly connect with identity api for varification)
- - - varified (true, false)
- - - created (date)
- - - timezone
- - - langages
- - - contact detail
Intelegence
- names
- - name 1
- - - type (legal, nicname, madename, etc)
- - - name
- - - laguadge
- - - created (date)
- - - varified (true, false)
- - - varified source (api id)
Identification
- id
- - id 1
- - - type (licence, passport, health card, etc)
- - - issuer (US gov)
- - - id number
- - - status: verified
- - - issued (date)
- - - experation (date)
- - - Verify provider: (api id)
- - - Verify date: log id
- - - image
- - - id_proof`
Condissions
- Sessions
- - Section #1
- - - auth type (OTP, Google, Apple, Normal)
- - - device_type (Android, IOS, Web)
- - - device_token
- - - location
- - - activated (date)
- - - status (active, inactive)
- - - inactive (date)
Knowladge
Envierment
- location
- mood
- tone
Preferences
- prefrences
- - communication
- - - method (push, email, text)
- - - default (true, false)
- - - allow (true, false)
- - - block (true, false)
- - - level (all, update, security, system)
- - - channels (id, id, id)
- - privacy
- - - allow (true, false)
- - - block (true, false)
- - - allow user data collection (true, false)
- - - allow user data share (true, false)
- - - allow user data anonymize (true, false)
- - - allow user data deletion (true, false)