views

package
v0.1.120 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2026 License: AGPL-3.0, AGPL-3.0-or-later Imports: 37 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SectionEmailThread   = string(bamltypes.SectionTypeEMAIL_THREAD)
	SectionApproval      = string(bamltypes.SectionTypeAPPROVAL)
	SectionInputForm     = string(bamltypes.SectionTypeINPUT_FORM)
	SectionTaskProgress  = string(bamltypes.SectionTypeTASK_PROGRESS)
	SectionOutputGallery = string(bamltypes.SectionTypeOUTPUT_GALLERY)
	SectionDataSummary   = string(bamltypes.SectionTypeDATA_SUMMARY)
	SectionSubtasks      = string(bamltypes.SectionTypeSUBTASKS)

	EmphasisPrimary   = string(bamltypes.SectionEmphasisPRIMARY)
	EmphasisSecondary = string(bamltypes.SectionEmphasisSECONDARY)
	EmphasisCollapsed = string(bamltypes.SectionEmphasisCOLLAPSED)

	ActionRetry  = "RETRY"
	ActionCancel = "CANCEL"
)
View Source
const ComponentRegistryDoc = `` /* 6145-byte string literal not displayed */
View Source
const UpdateTypeConversation = string(bamltypes.ViewUpdateTypeCONVERSATION)

UpdateTypeConversation is the BAML enum value for conversation-only updates (no view content changes). Exported so the API layer can reference it without importing the generated baml_client/types package directly.

Variables

View Source
var ErrInvalidViewColumnKey = errors.New("invalid view column key")
View Source
var ErrNoOutputsForTask = errors.New("no outputs found for task")
View Source
var ErrViewRowNotFound = errors.New("view row not found")

Functions

func ConfigColumnsToMeta added in v0.1.110

func ConfigColumnsToMeta(config map[string]any) []types.ColumnMeta

func MappingSchemaHash added in v0.1.104

func MappingSchemaHash(sheet types.SheetSpec, comp types.ComponentSpec) string

func NormalizeDefinition

func NormalizeDefinition(def *types.ViewDefinition)

NormalizeDefinition canonicalizes a view definition for persistence. It enforces the same schema invariants used by the copilot publish path.

func OutputMatchesDataSource

func OutputMatchesDataSource(output *types.TaskOutput, ds *types.DataSource) bool

Types

type ActionSpecJSON added in v0.1.110

type ActionSpecJSON struct {
	Type    string `json:"type" bson:"type"`
	Label   string `json:"label" bson:"label"`
	Primary bool   `json:"primary" bson:"primary"`
}

type Artifact

type Artifact struct {
	// contains filtered or unexported fields
}

Artifact derives stable identity and display properties from a TaskOutput. BAML ExtractOutputs provides artifact_key, artifact_label, and artifact_kind at generation time. The methods below prefer those explicit values and fall back to lightweight heuristics for outputs created before the BAML enrichment.

func ArtifactOf

func ArtifactOf(o *types.TaskOutput) Artifact

func (Artifact) Key

func (a Artifact) Key() string

func (Artifact) Kind

func (a Artifact) Kind() string

func (Artifact) Label

func (a Artifact) Label() string

func (Artifact) MatchesKey

func (a Artifact) MatchesKey(artifactKey string) bool

type AttachedFile added in v0.1.112

type AttachedFile struct {
	Path        string `json:"path"`
	Name        string `json:"name"`
	ContentType string `json:"content_type,omitempty"`
}

type ChatMessage added in v0.1.112

type ChatMessage struct {
	Role       string            `json:"role"`
	Content    string            `json:"content"`
	Timestamp  int64             `json:"ts"`
	Operations []OperationResult `json:"operations,omitempty"`
}

type ChatState added in v0.1.112

type ChatState struct {
	ID              string        `json:"id"`
	WorkspaceID     string        `json:"workspace_id"`
	Status          string        `json:"status"`
	ViewContent     string        `json:"view_content"`
	PublishedViewID string        `json:"published_view_id,omitempty"`
	Messages        []ChatMessage `json:"messages"`
	CreatedAt       int64         `json:"created_at"`
	UpdatedAt       int64         `json:"updated_at"`
}

type Copilot

type Copilot struct {
	// contains filtered or unexported fields
}

func NewCopilot

func NewCopilot(s2 *common.S2Client, redis *common.RedisClient, backend repository.BackendRepository, storage *clients.StorageClient, agentAPI *orchestration.AgentAPI, store *ViewStore) *Copilot

func (*Copilot) BuildActiveTasksContext added in v0.1.112

func (c *Copilot) BuildActiveTasksContext(ctx context.Context, workspaceID uint, viewContent string, viewID string) string

BuildActiveTasksContext loads active/waiting tasks for the view's agents and formats them for the BAML prompt so the model can reason about what to approve, reject, or dispatch.

func (*Copilot) BuildViewDataContext added in v0.1.108

func (c *Copilot) BuildViewDataContext(ctx context.Context, viewID string, viewContent string) string

BuildViewDataContext loads row data from MongoDB for a published view and formats it as a readable text table that can be injected into the BAML prompt.

func (*Copilot) BuildWorkspaceContext

func (c *Copilot) BuildWorkspaceContext(ctx context.Context, workspaceID uint) string

func (*Copilot) ChatAvailable added in v0.1.112

func (c *Copilot) ChatAvailable() bool

func (*Copilot) CreateChatState added in v0.1.112

func (c *Copilot) CreateChatState(workspaceID string) *ChatState

func (*Copilot) DeleteChatState added in v0.1.112

func (c *Copilot) DeleteChatState(ctx context.Context, workspaceID, id string) error

func (*Copilot) EnsureViewAgentsExist added in v0.1.117

func (c *Copilot) EnsureViewAgentsExist(ctx context.Context, workspaceID uint, viewContent string) []OperationResult

EnsureViewAgentsExist creates any agents referenced in the view that don't exist yet — handles the case where the model puts agent names in the view without emitting CREATE_AGENT operations.

func (*Copilot) ExecuteOperations

func (c *Copilot) ExecuteOperations(ctx context.Context, workspaceID uint, ops []bamltypes.Operation, viewID string) []OperationResult

func (*Copilot) FormatHistory

func (c *Copilot) FormatHistory(messages []ChatMessage) string

func (*Copilot) GenerateStream

func (c *Copilot) GenerateStream(
	ctx context.Context,
	cs *ChatState,
	workspaceID uint,
	userMessage string,
	viewID string,
	attachedFiles []AttachedFile,
	onChunk func(partial *PartialChatResponse),
) (*bamltypes.ViewDraftResponse, error)

func (*Copilot) IndexDraftCreated

func (c *Copilot) IndexDraftCreated(ctx context.Context, workspaceID, draftID, desc, viewName, viewID string) error

func (*Copilot) IndexDraftPublished

func (c *Copilot) IndexDraftPublished(ctx context.Context, workspaceID, draftID, viewName, viewID string) error

func (*Copilot) IndexDraftPublishedAsync added in v0.1.107

func (c *Copilot) IndexDraftPublishedAsync(workspaceID, draftID, viewName, viewID string)

func (*Copilot) ListDrafts

func (c *Copilot) ListDrafts(ctx context.Context, workspaceID string) ([]DraftSummary, error)

func (*Copilot) LoadChatState added in v0.1.112

func (c *Copilot) LoadChatState(ctx context.Context, workspaceID, viewID string) (*ChatState, error)

func (*Copilot) PersistChatMeta added in v0.1.112

func (c *Copilot) PersistChatMeta(ctx context.Context, cs *ChatState) error

Public persistence API — thin wrappers for callers.

func (*Copilot) PersistOperations added in v0.1.112

func (c *Copilot) PersistOperations(ctx context.Context, viewID string, results []OperationResult)

func (*Copilot) PersistPublishedViewID

func (c *Copilot) PersistPublishedViewID(ctx context.Context, chatID, viewID string) error

func (*Copilot) PersistViewContent

func (c *Copilot) PersistViewContent(ctx context.Context, viewID, viewContent string) error

func (*Copilot) PublishView

func (c *Copilot) PublishView(ctx context.Context, cs *ChatState, workspaceID uint) (*types.View, error)

func (*Copilot) ReconcileViewContent

func (c *Copilot) ReconcileViewContent(ctx context.Context, workspaceID uint, viewContent string, opResults []OperationResult) (string, error)

type DataResolver

type DataResolver struct {
	// contains filtered or unexported fields
}

func NewDataResolver

func NewDataResolver(backend repository.BackendRepository, store *ViewStore) *DataResolver

func (*DataResolver) RegenerateRow

func (r *DataResolver) RegenerateRow(ctx context.Context, workspaceID uint, viewID string, sheet types.SheetSpec, comp types.ComponentSpec, taskID string, opts ResolveOptions) (*types.ResolvedData, error)

RegenerateRow re-maps a single task's outputs through BAML for one sheet, replacing the cached rows for that task. Returns the full re-assembled table.

func (*DataResolver) Resolve

func (r *DataResolver) Resolve(ctx context.Context, workspaceID uint, viewID string, sheet types.SheetSpec, comp types.ComponentSpec, opts ResolveOptions) (*types.ResolvedData, error)

Resolve maps task outputs to a sheet table's schema using BAML.

func (*DataResolver) ResolveWidgets added in v0.1.108

func (r *DataResolver) ResolveWidgets(ctx context.Context, workspaceID uint, viewID string, sheet types.SheetSpec, comp types.ComponentSpec, opts ResolveOptions) ([]types.WidgetData, error)

func (*DataResolver) Store

func (r *DataResolver) Store() *ViewStore

Store returns the ViewStore for direct access (used by the views API for cell edits).

type DetailLayoutResponse added in v0.1.110

type DetailLayoutResponse struct {
	Sections []DetailSectionJSON `json:"sections" bson:"sections"`
	Actions  []ActionSpecJSON    `json:"actions" bson:"actions"`
}

func ClassifyDetailTemplate added in v0.1.110

func ClassifyDetailTemplate(ctx context.Context, tableTitle string, columns []types.ColumnMeta) DetailLayoutResponse

func DetailTemplateForComponent added in v0.1.110

func DetailTemplateForComponent(comp *types.ComponentSpec) DetailLayoutResponse

func InferDetailTemplate added in v0.1.110

func InferDetailTemplate(columns []types.ColumnMeta) DetailLayoutResponse

func ResolveProjectedLayout added in v0.1.110

func ResolveProjectedLayout(template DetailLayoutResponse, projection DetailProjection) DetailLayoutResponse

type DetailProjection added in v0.1.110

type DetailProjection struct {
	Surface        DetailSurface
	Blocker        *types.ResolvedBlocker
	Outputs        []*types.TaskOutput
	GalleryOutputs []*types.TaskOutput
	ThreadOutputs  []*types.TaskOutput
	HasTask        bool
	HasSubtasks    bool
	IsTaskWaiting  bool
	IsTaskError    bool
	IsTaskActive   bool
}

func ProjectDetail added in v0.1.110

func ProjectDetail(task *types.AgentTask, outputs []*types.TaskOutput, subtasks []*types.AgentTask) DetailProjection

type DetailSectionJSON added in v0.1.110

type DetailSectionJSON struct {
	Type        string  `json:"type" bson:"type"`
	Title       string  `json:"title" bson:"title"`
	Description *string `json:"description,omitempty" bson:"description,omitempty"`
	Emphasis    string  `json:"emphasis" bson:"emphasis"`
}

type DetailSurface added in v0.1.110

type DetailSurface string
const (
	DetailSurfaceDetails      DetailSurface = "details"
	DetailSurfaceApproval     DetailSurface = "approval"
	DetailSurfaceInput        DetailSurface = "input"
	DetailSurfaceConversation DetailSurface = "conversation"
	DetailSurfaceOutputs      DetailSurface = "outputs"
)

type DraftSummary

type DraftSummary struct {
	ID          string `json:"id"`
	Status      string `json:"status"`
	ViewName    string `json:"view_name,omitempty"`
	ViewID      string `json:"view_id,omitempty"`
	Description string `json:"description,omitempty"`
	CreatedAt   int64  `json:"created_at"`
	UpdatedAt   int64  `json:"updated_at"`
}

type EmailThreadFetcher added in v0.1.110

type EmailThreadFetcher struct {
	// contains filtered or unexported fields
}

func NewEmailThreadFetcher added in v0.1.110

func NewEmailThreadFetcher(backend repository.BackendRepository) *EmailThreadFetcher

func (*EmailThreadFetcher) FetchThreads added in v0.1.110

func (f *EmailThreadFetcher) FetchThreads(ctx context.Context, workspaceID uint, threadIDs []string) map[string][]ThreadMessage

type ExcludedRowSnapshot added in v0.1.108

type ExcludedRowSnapshot struct {
	ComponentID     string            `bson:"component_id,omitempty"`
	TaskID          string            `bson:"task_id"`
	RowKey          string            `bson:"row_key"`
	SourceOutputIDs []string          `bson:"source_output_ids,omitempty"`
	Cells           map[string]string `bson:"cells"`
}

ExcludedRowSnapshot is the data we store when a user deletes a row so the BAML mapper knows not to regenerate it.

type ImportParams added in v0.1.119

type ImportParams struct {
	Store       *ViewStore
	Backend     repository.BackendRepository
	Data        []byte
	FilePath    string
	ViewID      string
	WorkspaceID uint
	SheetID     string
	ComponentID string
	ColMapping  map[string]string // caller-provided mapping bypasses resolution
}

type ImportResult added in v0.1.119

type ImportResult struct {
	ImportID    string   `json:"import_id"`
	RowCount    int      `json:"row_count"`
	ColumnCount int      `json:"column_count"`
	NewColumns  []string `json:"new_columns,omitempty"`
	ParseErrors []string `json:"parse_errors,omitempty"`
}

func ImportData added in v0.1.119

func ImportData(ctx context.Context, p ImportParams) (*ImportResult, error)

type OperationResult

type OperationResult struct {
	Type       string `json:"type"`
	Name       string `json:"name"`
	Status     string `json:"status"`
	Error      string `json:"error,omitempty"`
	AgentID    string `json:"agent_id,omitempty"`
	TaskID     string `json:"task_id,omitempty"`
	AgentName  string `json:"agent_name,omitempty"`
	Message    string `json:"message,omitempty"`
	ScheduleID string `json:"schedule_id,omitempty"`
}

type PartialChatResponse added in v0.1.112

type PartialChatResponse struct {
	Message     string
	ViewContent string
	UpdateType  string
}

type ResolveOptions

type ResolveOptions struct {
	ForceRefresh  bool
	ViewAgentRefs []string
	SourceViewID  string
}

type RowDetailContext added in v0.1.110

type RowDetailContext struct {
	ParentTaskID    string
	DetailTaskID    string
	SourceOutputIDs []string
	Task            *types.AgentTask
	Outputs         []*types.TaskOutput
	Subtasks        []*types.AgentTask
}

func ResolveRowDetailContext added in v0.1.110

func ResolveRowDetailContext(
	ctx context.Context,
	backend rowDetailContextBackend,
	workspaceID uint,
	parentTask *types.AgentTask,
	parentOutputs []*types.TaskOutput,
	row *ViewRow,
) (RowDetailContext, error)

type ThreadMessage added in v0.1.110

type ThreadMessage struct {
	ID         string   `json:"id"`
	ThreadID   string   `json:"thread_id"`
	From       string   `json:"from"`
	To         string   `json:"to"`
	Subject    string   `json:"subject"`
	Body       string   `json:"body"`
	Snippet    string   `json:"snippet"`
	Date       string   `json:"date"`
	Timestamp  int64    `json:"timestamp"`
	IsOutbound bool     `json:"is_outbound"`
	Labels     []string `json:"labels,omitempty"`
	Deeplink   string   `json:"deeplink,omitempty"`
}

type ViewRow

type ViewRow struct {
	ID              string            `bson:"_id"`
	StableRef       string            `bson:"stable_ref,omitempty"`
	SheetID         string            `bson:"sheet_id"`
	ComponentID     string            `bson:"component_id,omitempty"`
	Marker          bool              `bson:"marker,omitempty"`
	GroupID         string            `bson:"group_id"`
	TaskID          string            `bson:"task_id"`
	RowKey          string            `bson:"row_key"`
	SchemaHash      string            `bson:"schema_hash"`
	OutputIDs       []string          `bson:"output_ids"`
	OutputSignature string            `bson:"output_signature,omitempty"`
	SourceOutputIDs []string          `bson:"source_output_ids,omitempty"`
	Cells           map[string]string `bson:"cells"`
	Manual          map[string]string `bson:"manual,omitempty"`
	Pinned          map[string]string `bson:"pinned,omitempty"`
	Source          string            `bson:"source,omitempty"`
	ImportID        string            `bson:"import_id,omitempty"`
	UpdatedAt       time.Time         `bson:"updated_at"`
}

ViewRow is the MongoDB document schema for a single rendered row in a sheet.

func (*ViewRow) IsImport added in v0.1.112

func (r *ViewRow) IsImport() bool

func (*ViewRow) MergedCells

func (r *ViewRow) MergedCells() map[string]string

MergedCells returns the three-layer merge: pinned (import seed) -> cells (BAML-computed) -> manual (user edits).

type ViewStore

type ViewStore struct {
	// contains filtered or unexported fields
}

func NewViewStore

func NewViewStore(mongo *common.MongoClient) *ViewStore

func (*ViewStore) Available

func (s *ViewStore) Available() bool

func (*ViewStore) CleanupStaleImportRows added in v0.1.119

func (s *ViewStore) CleanupStaleImportRows(ctx context.Context, viewID, sheetID, componentID string, keepIDs []string) (int64, error)

CleanupStaleImportRows removes import-source rows that weren't part of the current import batch. Called after upsert so valid rows are already written — this cleans up orphans from previous imports (different row count or legacy ID format) without a destructive delete-before-insert window.

func (*ViewStore) ClearManualCells

func (s *ViewStore) ClearManualCells(ctx context.Context, viewID, sheetID, componentID string, rowIDs, columnKeys []string) error

ClearManualCells removes manual overlays for the given rows and columns. Import-sourced rows are skipped — their pinned values are never cleared.

func (*ViewStore) DeleteColumn

func (s *ViewStore) DeleteColumn(ctx context.Context, viewID, sheetID, componentID, key, schemaHash string) error

DeleteColumn removes a column key from cells and manual across a component scope.

func (*ViewStore) DeleteImport added in v0.1.112

func (s *ViewStore) DeleteImport(ctx context.Context, viewID, sheetID, importID string) error

DeleteImport removes all rows from a specific import batch.

func (*ViewStore) DeleteRowsByIDs added in v0.1.112

func (s *ViewStore) DeleteRowsByIDs(ctx context.Context, viewID string, rowIDs []string) error

DeleteRowsByIDs removes specific rows by their document IDs.

func (*ViewStore) DeleteRowsNotInGroups

func (s *ViewStore) DeleteRowsNotInGroups(ctx context.Context, viewID, sheetID, componentID string, groupIDs, keepRowIDs []string) error

DeleteRowsNotInGroups removes stale rows for the remapped groups. Import-sourced rows are always protected from deletion.

func (*ViewStore) DeleteSheet

func (s *ViewStore) DeleteSheet(ctx context.Context, viewID, sheetID string) error

DeleteSheet removes all rows for a sheet.

func (*ViewStore) DeleteWidgetRows added in v0.1.108

func (s *ViewStore) DeleteWidgetRows(ctx context.Context, viewID, sheetID string) error

DeleteWidgetRows removes all widget rows for a sheet.

func (*ViewStore) DropView

func (s *ViewStore) DropView(ctx context.Context, viewID string) error

DropView drops the entire MongoDB collection for a view.

func (*ViewStore) EnrichImportRow added in v0.1.112

func (s *ViewStore) EnrichImportRow(ctx context.Context, viewID string, row ViewRow) error

EnrichImportRow updates the Cells and task association on an existing import row without changing its Pinned values or identity.

func (*ViewStore) EnsureIndexes added in v0.1.110

func (s *ViewStore) EnsureIndexes(ctx context.Context, viewID string) error

EnsureIndexes creates indexes required for the view collection, including a unique index on stable_ref.

func (*ViewStore) ExcludeRow

func (s *ViewStore) ExcludeRow(ctx context.Context, viewID, sheetID, rowID string) error

ExcludeRow snapshots a row's data into the per-sheet exclusion document, then hard-deletes the row. The snapshot is passed to the BAML mapper so it knows not to regenerate matching rows.

func (*ViewStore) GetExcludedRows added in v0.1.108

func (s *ViewStore) GetExcludedRows(ctx context.Context, viewID, sheetID string) ([]ExcludedRowSnapshot, error)

GetExcludedRows returns the exclusion snapshots for a sheet.

func (*ViewStore) GetRow

func (s *ViewStore) GetRow(ctx context.Context, viewID, sheetID, rowID string) (*ViewRow, error)

func (*ViewStore) GetRowByID added in v0.1.110

func (s *ViewStore) GetRowByID(ctx context.Context, viewID, rowID string) (*ViewRow, error)

GetRowByID loads a row by _id only (no sheet filter). Used for detail layout cache lookups.

func (*ViewStore) GetRows

func (s *ViewStore) GetRows(ctx context.Context, viewID, sheetID, componentID string) ([]ViewRow, error)

func (*ViewStore) GetRowsBySource added in v0.1.112

func (s *ViewStore) GetRowsBySource(ctx context.Context, viewID, sheetID, componentID, source string) ([]ViewRow, error)

GetRowsBySource returns rows filtered by source (e.g. "import") within a component scope.

func (*ViewStore) GetWidgetRows added in v0.1.108

func (s *ViewStore) GetWidgetRows(ctx context.Context, viewID, sheetID string) ([]WidgetRow, error)

GetWidgetRows loads all widget rows for a sheet.

func (*ViewStore) RenameColumn

func (s *ViewStore) RenameColumn(ctx context.Context, viewID, sheetID, componentID, oldKey, newKey, schemaHash string) error

RenameColumn renames a column key in cells and manual across a component scope.

func (*ViewStore) RestoreRow

func (s *ViewStore) RestoreRow(ctx context.Context, viewID, sheetID, rowID string) error

RestoreRow removes a snapshot from the exclusion document by matching task_id and row_key. The row will be regenerated on the next mapping pass.

func (*ViewStore) UpdateCells

func (s *ViewStore) UpdateCells(ctx context.Context, viewID, sheetID, rowID string, cells map[string]string) error

UpdateCells writes user-edited values into the manual overlay.

func (*ViewStore) UpdateSchemaHash added in v0.1.110

func (s *ViewStore) UpdateSchemaHash(ctx context.Context, viewID, sheetID, componentID, schemaHash string) error

UpdateSchemaHash stamps a new schema_hash on all rows in a component scope without remapping cells. Used when columns are added — missing cell keys render as empty so no cell mutation is needed.

func (*ViewStore) UpsertRows

func (s *ViewStore) UpsertRows(ctx context.Context, viewID string, rows []ViewRow) error

UpsertRows bulk-upserts rows into the view collection. Existing manual edits and excluded flags are preserved — only computed row data is replaced.

func (*ViewStore) UpsertWidgetRow added in v0.1.108

func (s *ViewStore) UpsertWidgetRow(ctx context.Context, viewID string, row WidgetRow) error

UpsertWidgetRow writes a single widget row.

type WidgetListData added in v0.1.108

type WidgetListData struct {
	Items []WidgetListItem `bson:"items"`
}

type WidgetListItem added in v0.1.108

type WidgetListItem struct {
	Label  string `bson:"label"`
	Value  string `bson:"value"`
	Detail string `bson:"detail,omitempty"`
}

type WidgetMapData added in v0.1.108

type WidgetMapData struct {
	Markers []WidgetMapMarker `bson:"markers"`
}

type WidgetMapMarker added in v0.1.108

type WidgetMapMarker struct {
	Lat    float64 `bson:"lat"`
	Lng    float64 `bson:"lng"`
	Label  string  `bson:"label"`
	Detail string  `bson:"detail,omitempty"`
}

type WidgetMetric added in v0.1.108

type WidgetMetric struct {
	Value      string `bson:"value"`
	Label      string `bson:"label"`
	Comparison string `bson:"comparison,omitempty"`
}

type WidgetRow added in v0.1.108

type WidgetRow struct {
	ID         string          `bson:"_id"`
	SheetID    string          `bson:"sheet_id"`
	WidgetID   string          `bson:"widget_id"`
	Type       string          `bson:"type"`
	Status     string          `bson:"status"`
	Error      string          `bson:"error,omitempty"`
	SchemaHash string          `bson:"schema_hash"`
	Metric     *WidgetMetric   `bson:"metric,omitempty"`
	MapData    *WidgetMapData  `bson:"map_data,omitempty"`
	ListData   *WidgetListData `bson:"list_data,omitempty"`
	UpdatedAt  time.Time       `bson:"updated_at"`
}

WidgetRow is the MongoDB document for resolved widget data.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL