yaml-flow 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{examples/example-board/reusable-server-runtime.js → board-livecards-server-runtime.js} +42 -20
- package/{examples/example-board/reusable-board-runtime-client.js → browser/board-livecards-runtime-client.js} +6 -2
- package/browser/{board-livegraph-runtime.js → board-livegraph-engine.js} +212 -16
- package/browser/board-livegraph-engine.js.map +1 -0
- package/browser/live-cards.js +362 -38
- package/browser/live-cards.schema.json +20 -4
- package/dist/board-livegraph-runtime/index.cjs +210 -14
- package/dist/board-livegraph-runtime/index.cjs.map +1 -1
- package/dist/board-livegraph-runtime/index.d.cts +49 -5
- package/dist/board-livegraph-runtime/index.d.ts +49 -5
- package/dist/board-livegraph-runtime/index.js +209 -15
- package/dist/board-livegraph-runtime/index.js.map +1 -1
- package/dist/card-compute/index.cjs +63 -7
- package/dist/card-compute/index.cjs.map +1 -1
- package/dist/card-compute/index.d.cts +2 -2
- package/dist/card-compute/index.d.ts +2 -2
- package/dist/card-compute/index.js +63 -7
- package/dist/card-compute/index.js.map +1 -1
- package/dist/cli/board-live-cards-cli.cjs +664 -75
- package/dist/cli/board-live-cards-cli.cjs.map +1 -1
- package/dist/cli/board-live-cards-cli.d.cts +33 -5
- package/dist/cli/board-live-cards-cli.d.ts +33 -5
- package/dist/cli/board-live-cards-cli.js +661 -76
- package/dist/cli/board-live-cards-cli.js.map +1 -1
- package/dist/{constants-ozjf1Ejw.d.cts → constants-BzZUyYlp.d.cts} +1 -1
- package/dist/{constants-DuzE5n03.d.ts → constants-oCEbNpul.d.ts} +1 -1
- package/dist/continuous-event-graph/index.cjs +47 -14
- package/dist/continuous-event-graph/index.cjs.map +1 -1
- package/dist/continuous-event-graph/index.d.cts +9 -9
- package/dist/continuous-event-graph/index.d.ts +9 -9
- package/dist/continuous-event-graph/index.js +47 -14
- package/dist/continuous-event-graph/index.js.map +1 -1
- package/dist/event-graph/index.cjs +29 -12
- package/dist/event-graph/index.cjs.map +1 -1
- package/dist/event-graph/index.d.cts +5 -5
- package/dist/event-graph/index.d.ts +5 -5
- package/dist/event-graph/index.js +29 -12
- package/dist/event-graph/index.js.map +1 -1
- package/dist/index.cjs +93 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +93 -20
- package/dist/index.js.map +1 -1
- package/dist/inference/index.cjs +29 -12
- package/dist/inference/index.cjs.map +1 -1
- package/dist/inference/index.d.cts +2 -2
- package/dist/inference/index.d.ts +2 -2
- package/dist/inference/index.js +29 -12
- package/dist/inference/index.js.map +1 -1
- package/dist/{journal-NLYuqege.d.ts → journal-9HEgs7dU.d.ts} +1 -1
- package/dist/{journal-DRfJiheM.d.cts → journal-B-JCfQnh.d.cts} +1 -1
- package/dist/{live-cards-bridge-Or7fdEJV.d.ts → live-cards-bridge-CeNxiVcm.d.ts} +6 -2
- package/dist/{live-cards-bridge-vGJ6tMzN.d.cts → live-cards-bridge-z_rJCSbi.d.cts} +6 -2
- package/dist/{schedule-CMcZe5Ny.d.ts → schedule-Cszq9LYY.d.ts} +1 -1
- package/dist/{schedule-CiucyCan.d.cts → schedule-qWNL0RQh.d.cts} +1 -1
- package/dist/{types-CMFSIjpc.d.cts → types-BBhqYGhE.d.cts} +4 -0
- package/dist/{types-CMFSIjpc.d.ts → types-BBhqYGhE.d.ts} +4 -0
- package/dist/{types-BzLD8bjb.d.cts → types-CHSdoAAA.d.cts} +1 -1
- package/dist/{types-C2eJ7DAV.d.ts → types-CoW0gQl3.d.ts} +1 -1
- package/dist/{validate-DJQTQ6bP.d.ts → validate-BAVzUJWa.d.ts} +1 -1
- package/dist/{validate-ke92Cleg.d.cts → validate-Dbu7ygys.d.cts} +1 -1
- package/examples/browser/boards/portfolio-tracker/cards/portfolio-risk-assessment.json +28 -0
- package/examples/browser/boards/portfolio-tracker/cards/rebalancing-strategy.json +28 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +187 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker.js +139 -5
- package/examples/example-board/agent-instructions-cardlayout.md +28 -0
- package/examples/example-board/agent-instructions.md +603 -0
- package/examples/example-board/cards/card-concentration.json +42 -0
- package/examples/example-board/cards/card-market-prices.json +51 -0
- package/examples/example-board/cards/card-portfolio-action.json +19 -0
- package/examples/example-board/cards/card-portfolio-risks.json +19 -0
- package/examples/example-board/cards/card-portfolio-value.json +62 -0
- package/examples/example-board/cards/card-portfolio.json +44 -0
- package/examples/example-board/demo-chat-handler.js +373 -33
- package/examples/example-board/demo-server-config.json +0 -2
- package/examples/example-board/demo-server.js +46 -7
- package/examples/example-board/demo-shell-browser.html +75 -207
- package/examples/example-board/demo-shell-with-server.html +14 -9
- package/examples/example-board/demo-shell.html +1 -1
- package/examples/example-board/demo-task-executor.js +259 -41
- package/package.json +6 -2
- package/schema/live-cards.schema.json +20 -4
- package/browser/board-livegraph-runtime.js.map +0 -1
- package/examples/example-board/board.yaml +0 -23
- package/examples/example-board/bootstrap_payload.json +0 -1
- package/examples/example-board/cards/card-chain-region-alert.json +0 -39
- package/examples/example-board/cards/card-chain-region-totals.json +0 -26
- package/examples/example-board/cards/card-chain-top-region.json +0 -24
- package/examples/example-board/cards/card-ex-actions.json +0 -32
- package/examples/example-board/cards/card-ex-chart.json +0 -30
- package/examples/example-board/cards/card-ex-filter.json +0 -36
- package/examples/example-board/cards/card-ex-filtered-by-preference.json +0 -59
- package/examples/example-board/cards/card-ex-form.json +0 -91
- package/examples/example-board/cards/card-ex-list.json +0 -22
- package/examples/example-board/cards/card-ex-markdown.json +0 -17
- package/examples/example-board/cards/card-ex-metric.json +0 -19
- package/examples/example-board/cards/card-ex-narrative.json +0 -36
- package/examples/example-board/cards/card-ex-source-http.json +0 -28
- package/examples/example-board/cards/card-ex-source.json +0 -21
- package/examples/example-board/cards/card-ex-status.json +0 -35
- package/examples/example-board/cards/card-ex-table.json +0 -30
- package/examples/example-board/cards/card-ex-todo.json +0 -29
- package/examples/example-board/mock.db +0 -15
- package/examples/example-board/reusable-runtime-artifacts-adapter.js +0 -233
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
function clone(value) {
|
|
2
|
-
return JSON.parse(JSON.stringify(value));
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
function taskStatusToCardStatus(taskStatus) {
|
|
6
|
-
if (taskStatus === 'running' || taskStatus === 'in-progress') return 'loading';
|
|
7
|
-
if (taskStatus === 'failed') return 'error';
|
|
8
|
-
if (taskStatus === 'completed') return 'fresh';
|
|
9
|
-
return 'fresh';
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function cardStatusToTaskStatus(cardStatus) {
|
|
13
|
-
if (cardStatus === 'loading') return 'in-progress';
|
|
14
|
-
if (cardStatus === 'error') return 'failed';
|
|
15
|
-
if (cardStatus === 'stale') return 'pending';
|
|
16
|
-
if (cardStatus === 'fresh') return 'completed';
|
|
17
|
-
return 'pending';
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function ensureObject(value, name) {
|
|
21
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
22
|
-
throw new Error(`${name} must be an object`);
|
|
23
|
-
}
|
|
24
|
-
return value;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function normalizeCardRuntimeArtifact(cardId, artifact) {
|
|
28
|
-
const safeArtifact = artifact && typeof artifact === 'object' && !Array.isArray(artifact)
|
|
29
|
-
? artifact
|
|
30
|
-
: {};
|
|
31
|
-
|
|
32
|
-
const cardData = safeArtifact.card_data && typeof safeArtifact.card_data === 'object' && !Array.isArray(safeArtifact.card_data)
|
|
33
|
-
? clone(safeArtifact.card_data)
|
|
34
|
-
: {};
|
|
35
|
-
|
|
36
|
-
const computedValues = safeArtifact.computed_values && typeof safeArtifact.computed_values === 'object' && !Array.isArray(safeArtifact.computed_values)
|
|
37
|
-
? clone(safeArtifact.computed_values)
|
|
38
|
-
: {};
|
|
39
|
-
|
|
40
|
-
const fetchedSources = safeArtifact.fetched_sources && typeof safeArtifact.fetched_sources === 'object' && !Array.isArray(safeArtifact.fetched_sources)
|
|
41
|
-
? clone(safeArtifact.fetched_sources)
|
|
42
|
-
: {};
|
|
43
|
-
|
|
44
|
-
const requiresData = safeArtifact.requires && typeof safeArtifact.requires === 'object' && !Array.isArray(safeArtifact.requires)
|
|
45
|
-
? clone(safeArtifact.requires)
|
|
46
|
-
: {};
|
|
47
|
-
|
|
48
|
-
return {
|
|
49
|
-
schema_version: safeArtifact.schema_version || 'v1',
|
|
50
|
-
card_id: typeof safeArtifact.card_id === 'string' ? safeArtifact.card_id : cardId,
|
|
51
|
-
card_data: cardData,
|
|
52
|
-
computed_values: computedValues,
|
|
53
|
-
fetched_sources: fetchedSources,
|
|
54
|
-
requires: requiresData,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function resolveRequiresData(cardDefinition, dataObjectsByToken) {
|
|
59
|
-
const resolved = {};
|
|
60
|
-
const tokens = Array.isArray(cardDefinition && cardDefinition.requires) ? cardDefinition.requires : [];
|
|
61
|
-
const safeObjects = dataObjectsByToken && typeof dataObjectsByToken === 'object' && !Array.isArray(dataObjectsByToken)
|
|
62
|
-
? dataObjectsByToken
|
|
63
|
-
: {};
|
|
64
|
-
|
|
65
|
-
for (const token of tokens) {
|
|
66
|
-
if (!Object.prototype.hasOwnProperty.call(safeObjects, token)) continue;
|
|
67
|
-
resolved[token] = clone(safeObjects[token]);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return resolved;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function buildLiveCardModelsFromArtifacts(payload) {
|
|
74
|
-
const safePayload = ensureObject(payload, 'payload');
|
|
75
|
-
const cardDefinitions = Array.isArray(safePayload.cardDefinitions) ? safePayload.cardDefinitions : [];
|
|
76
|
-
const statusSnapshot = safePayload.statusSnapshot && typeof safePayload.statusSnapshot === 'object' ? safePayload.statusSnapshot : {};
|
|
77
|
-
const cardRuntimeById = safePayload.cardRuntimeById && typeof safePayload.cardRuntimeById === 'object' ? safePayload.cardRuntimeById : {};
|
|
78
|
-
const dataObjectsByToken = safePayload.dataObjectsByToken && typeof safePayload.dataObjectsByToken === 'object' ? safePayload.dataObjectsByToken : {};
|
|
79
|
-
const statusCards = Array.isArray(statusSnapshot.cards) ? statusSnapshot.cards : [];
|
|
80
|
-
const statusById = new Map(statusCards.map((card) => [card.name, card]));
|
|
81
|
-
|
|
82
|
-
return cardDefinitions.map((cardDefinition) => {
|
|
83
|
-
const card = clone(cardDefinition);
|
|
84
|
-
const cardId = card && card.id;
|
|
85
|
-
if (!cardId) throw new Error('cardDefinitions entry missing id');
|
|
86
|
-
|
|
87
|
-
const statusCard = statusById.get(cardId);
|
|
88
|
-
const runtimeArtifact = normalizeCardRuntimeArtifact(cardId, cardRuntimeById[cardId]);
|
|
89
|
-
|
|
90
|
-
const cardData = {
|
|
91
|
-
...((card.card_data && typeof card.card_data === 'object' && !Array.isArray(card.card_data)) ? card.card_data : {}),
|
|
92
|
-
...(runtimeArtifact.card_data || {}),
|
|
93
|
-
status: taskStatusToCardStatus(statusCard && statusCard.status),
|
|
94
|
-
lastRun: (statusCard && statusCard.runtime && statusCard.runtime.last_transition_at) || null,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
if (statusCard && statusCard.error && statusCard.error.message) {
|
|
98
|
-
cardData.error = statusCard.error.message;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const runtimeState = statusCard
|
|
102
|
-
? {
|
|
103
|
-
task_status: statusCard.status || null,
|
|
104
|
-
card_status: taskStatusToCardStatus(statusCard.status),
|
|
105
|
-
runtime: clone(statusCard.runtime || {}),
|
|
106
|
-
error: statusCard.error ? clone(statusCard.error) : null,
|
|
107
|
-
blocked_by: Array.isArray(statusCard.blocked_by) ? clone(statusCard.blocked_by) : [],
|
|
108
|
-
requires_missing: Array.isArray(statusCard.requires_missing) ? clone(statusCard.requires_missing) : [],
|
|
109
|
-
}
|
|
110
|
-
: {
|
|
111
|
-
task_status: null,
|
|
112
|
-
card_status: cardData.status || 'fresh',
|
|
113
|
-
runtime: { last_transition_at: cardData.lastRun || null },
|
|
114
|
-
error: cardData.error ? { message: cardData.error } : null,
|
|
115
|
-
blocked_by: [],
|
|
116
|
-
requires_missing: [],
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
id: cardId,
|
|
121
|
-
card,
|
|
122
|
-
card_data: cardData,
|
|
123
|
-
fetched_sources: runtimeArtifact.fetched_sources || {},
|
|
124
|
-
requires: resolveRequiresData(card, dataObjectsByToken),
|
|
125
|
-
computed_values: runtimeArtifact.computed_values || {},
|
|
126
|
-
runtime_state: runtimeState,
|
|
127
|
-
data_objects: clone(dataObjectsByToken),
|
|
128
|
-
};
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function buildBrowserArtifactsFromRuntime({ boardPath, cardDefinitions, runtimeModels, graphState }) {
|
|
133
|
-
const safeCardDefinitions = Array.isArray(cardDefinitions) ? cardDefinitions : [];
|
|
134
|
-
const safeRuntimeModels = Array.isArray(runtimeModels) ? runtimeModels : [];
|
|
135
|
-
const runtimeModelById = new Map(safeRuntimeModels.map((model) => [model.id, model]));
|
|
136
|
-
const taskStates = graphState && graphState.state && graphState.state.tasks ? graphState.state.tasks : {};
|
|
137
|
-
|
|
138
|
-
const cardRuntimeById = {};
|
|
139
|
-
for (const model of safeRuntimeModels) {
|
|
140
|
-
if (!model || !model.id) continue;
|
|
141
|
-
cardRuntimeById[model.id] = {
|
|
142
|
-
schema_version: 'v1',
|
|
143
|
-
card_id: model.id,
|
|
144
|
-
card_data: clone(model.card_data || {}),
|
|
145
|
-
computed_values: clone(model.computed_values || {}),
|
|
146
|
-
fetched_sources: clone(model.fetched_sources || {}),
|
|
147
|
-
requires: clone(model.requires || {}),
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const dataObjectsByToken = {};
|
|
152
|
-
for (const taskName of Object.keys(taskStates)) {
|
|
153
|
-
const taskState = taskStates[taskName] || {};
|
|
154
|
-
const taskData = taskState.data && typeof taskState.data === 'object' ? taskState.data : {};
|
|
155
|
-
const providesData = taskData.provides_data && typeof taskData.provides_data === 'object'
|
|
156
|
-
? taskData.provides_data
|
|
157
|
-
: {};
|
|
158
|
-
|
|
159
|
-
for (const token of Object.keys(providesData)) {
|
|
160
|
-
dataObjectsByToken[token] = clone(providesData[token]);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const statusCards = safeCardDefinitions.map((cardDefinition) => {
|
|
165
|
-
const runtimeModel = runtimeModelById.get(cardDefinition.id) || {};
|
|
166
|
-
const taskState = taskStates[cardDefinition.id] || {};
|
|
167
|
-
const taskStatus = typeof taskState.status === 'string'
|
|
168
|
-
? taskState.status
|
|
169
|
-
: cardStatusToTaskStatus(runtimeModel.card_data && runtimeModel.card_data.status);
|
|
170
|
-
|
|
171
|
-
const errorMessage = typeof taskState.error === 'string'
|
|
172
|
-
? taskState.error
|
|
173
|
-
: runtimeModel.card_data && typeof runtimeModel.card_data.error === 'string'
|
|
174
|
-
? runtimeModel.card_data.error
|
|
175
|
-
: null;
|
|
176
|
-
|
|
177
|
-
return {
|
|
178
|
-
name: cardDefinition.id,
|
|
179
|
-
status: taskStatus,
|
|
180
|
-
error: errorMessage ? {
|
|
181
|
-
message: errorMessage,
|
|
182
|
-
code: 'TASK_FAILED',
|
|
183
|
-
at: taskState.failedAt || null,
|
|
184
|
-
source: 'browser-runtime',
|
|
185
|
-
} : undefined,
|
|
186
|
-
requires: Array.isArray(cardDefinition.requires) ? cardDefinition.requires : [],
|
|
187
|
-
requires_satisfied: [],
|
|
188
|
-
requires_missing: [],
|
|
189
|
-
provides_declared: Array.isArray(cardDefinition.provides)
|
|
190
|
-
? cardDefinition.provides.map((entry) => entry.bindTo)
|
|
191
|
-
: [cardDefinition.id],
|
|
192
|
-
provides_runtime: Object.keys((taskState.data && taskState.data.provides_data) || {}).sort(),
|
|
193
|
-
blocked_by: [],
|
|
194
|
-
unblocks: [],
|
|
195
|
-
runtime: {
|
|
196
|
-
attempt_count: taskState.executionCount || 0,
|
|
197
|
-
restart_count: taskState.retryCount || 0,
|
|
198
|
-
in_progress_since: taskStatus === 'in-progress' ? (taskState.startedAt || null) : null,
|
|
199
|
-
last_transition_at: taskState.lastUpdated || (runtimeModel.card_data && runtimeModel.card_data.lastRun) || null,
|
|
200
|
-
last_completed_at: taskState.completedAt || null,
|
|
201
|
-
last_restarted_at: taskState.startedAt || null,
|
|
202
|
-
status_age_ms: null,
|
|
203
|
-
},
|
|
204
|
-
};
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
return {
|
|
208
|
-
cardDefinitions: clone(safeCardDefinitions),
|
|
209
|
-
cardRuntimeById,
|
|
210
|
-
dataObjectsByToken,
|
|
211
|
-
statusSnapshot: {
|
|
212
|
-
schema_version: 'v1',
|
|
213
|
-
meta: { board: { path: boardPath || 'browser-runtime' } },
|
|
214
|
-
summary: {
|
|
215
|
-
card_count: statusCards.length,
|
|
216
|
-
completed: statusCards.filter((card) => card.status === 'completed').length,
|
|
217
|
-
eligible: 0,
|
|
218
|
-
pending: statusCards.filter((card) => card.status === 'pending').length,
|
|
219
|
-
blocked: 0,
|
|
220
|
-
unresolved: 0,
|
|
221
|
-
failed: statusCards.filter((card) => card.status === 'failed').length,
|
|
222
|
-
in_progress: statusCards.filter((card) => card.status === 'in-progress').length,
|
|
223
|
-
orphan_cards: 0,
|
|
224
|
-
topology: {
|
|
225
|
-
edge_count: 0,
|
|
226
|
-
max_fan_out_card: null,
|
|
227
|
-
max_fan_out: 0,
|
|
228
|
-
},
|
|
229
|
-
},
|
|
230
|
-
cards: statusCards,
|
|
231
|
-
},
|
|
232
|
-
};
|
|
233
|
-
}
|