@tangle-network/agent-app 0.27.2 → 0.29.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/dist/DesignCanvas-AOIVN3SJ.js +12 -0
- package/dist/DesignCanvasEditor-IB2FMBBD.js +13 -0
- package/dist/InviteAcceptPage-EUOGZO2X.js +7 -0
- package/dist/MembersPanel-4CGUQRPF.js +8 -0
- package/dist/MembersPanel-4CGUQRPF.js.map +1 -0
- package/dist/{TimelineEditor-JDG54OBP.js → TimelineEditor-Z7C6BFP5.js} +2 -2
- package/dist/TimelineEditor-Z7C6BFP5.js.map +1 -0
- package/dist/access-ChAHG4Tp.d.ts +539 -0
- package/dist/{apply-Cp8c3K9D.d.ts → apply-Gk4raT2j.d.ts} +3 -1
- package/dist/{chunk-AFDROJ64.js → chunk-2QI7XV2T.js} +1 -1
- package/dist/chunk-2QI7XV2T.js.map +1 -0
- package/dist/chunk-3G334FVA.js +162 -0
- package/dist/chunk-3G334FVA.js.map +1 -0
- package/dist/chunk-3SVAA3MA.js +41 -0
- package/dist/chunk-3SVAA3MA.js.map +1 -0
- package/dist/{chunk-LUE4HO5C.js → chunk-4IQMTTNE.js} +10 -10
- package/dist/chunk-4IQMTTNE.js.map +1 -0
- package/dist/chunk-535V6BH6.js +128 -0
- package/dist/chunk-535V6BH6.js.map +1 -0
- package/dist/chunk-63CE7FEZ.js +63 -0
- package/dist/chunk-63CE7FEZ.js.map +1 -0
- package/dist/{chunk-5RT6KY4G.js → chunk-GQRL6VNU.js} +1 -1
- package/dist/chunk-GQRL6VNU.js.map +1 -0
- package/dist/{chunk-SCG5JJ4C.js → chunk-HFC4BTWJ.js} +32 -4
- package/dist/chunk-HFC4BTWJ.js.map +1 -0
- package/dist/{chunk-7QCIYDGC.js → chunk-IOREXWLM.js} +2 -2
- package/dist/{chunk-6UOE5CTA.js → chunk-JT6HHO5P.js} +5 -10
- package/dist/chunk-JT6HHO5P.js.map +1 -0
- package/dist/{chunk-JZAJE3JL.js → chunk-M2EBUDZ7.js} +19 -5
- package/dist/chunk-M2EBUDZ7.js.map +1 -0
- package/dist/{chunk-HABVCJJT.js → chunk-N4ZFKQ5C.js} +271 -404
- package/dist/chunk-N4ZFKQ5C.js.map +1 -0
- package/dist/chunk-S5CAJX6O.js +14 -0
- package/dist/chunk-S5CAJX6O.js.map +1 -0
- package/dist/{chunk-RJ2ZHK5D.js → chunk-S6WS2B32.js} +132 -7
- package/dist/chunk-S6WS2B32.js.map +1 -0
- package/dist/chunk-SQV7NUEM.js +136 -0
- package/dist/chunk-SQV7NUEM.js.map +1 -0
- package/dist/chunk-UAKFCMWK.js +1 -0
- package/dist/chunk-UAKFCMWK.js.map +1 -0
- package/dist/chunk-V5XZKHCL.js +296 -0
- package/dist/chunk-V5XZKHCL.js.map +1 -0
- package/dist/chunk-XWJXZ6WE.js +604 -0
- package/dist/chunk-XWJXZ6WE.js.map +1 -0
- package/dist/chunk-Y2SZVW35.js +125 -0
- package/dist/chunk-Y2SZVW35.js.map +1 -0
- package/dist/{chunk-27LQXQSS.js → chunk-YEWTVDDT.js} +224 -767
- package/dist/chunk-YEWTVDDT.js.map +1 -0
- package/dist/{chunk-UDXMR3AD.js → chunk-YNALYIQ3.js} +56 -18
- package/dist/chunk-YNALYIQ3.js.map +1 -0
- package/dist/command-stack-CkjelfK_.d.ts +267 -0
- package/dist/design-canvas/drizzle.d.ts +2 -2
- package/dist/design-canvas/index.d.ts +7 -6
- package/dist/design-canvas/index.js +3 -2
- package/dist/design-canvas-react/engine.d.ts +349 -0
- package/dist/design-canvas-react/engine.js +86 -0
- package/dist/design-canvas-react/engine.js.map +1 -0
- package/dist/design-canvas-react/index.d.ts +69 -649
- package/dist/design-canvas-react/index.js +84 -173
- package/dist/design-canvas-react/index.js.map +1 -1
- package/dist/design-canvas-react/lazy.d.ts +6 -0
- package/dist/design-canvas-react/lazy.js +9 -0
- package/dist/design-canvas-react/lazy.js.map +1 -0
- package/dist/{export-presets-Dl5Aa5xj.d.ts → export-presets-DAsU5Wal.d.ts} +2 -143
- package/dist/flow-types-Cb_AblZs.d.ts +25 -0
- package/dist/index.d.ts +11 -8
- package/dist/index.js +21 -8
- package/dist/lazy-BHHqS8-j.d.ts +72 -0
- package/dist/missions/index.d.ts +12 -0
- package/dist/missions/index.js +1 -1
- package/dist/{model-BHLN208Z.d.ts → model-BBwyOuWG.d.ts} +3 -1
- package/dist/operations-DLIvvD00.d.ts +144 -0
- package/dist/platform/index.js +1 -1
- package/dist/roles-CLtYKHHl.d.ts +49 -0
- package/dist/runtime/index.d.ts +33 -33
- package/dist/runtime/index.js +1 -1
- package/dist/sequences/index.d.ts +1 -1
- package/dist/sequences/index.js +2 -1
- package/dist/sequences-react/index.d.ts +15 -1
- package/dist/sequences-react/index.js +2 -2
- package/dist/{store-CUStmtdH.d.ts → store-CFyxgTlD.d.ts} +1 -1
- package/dist/teams/drizzle.d.ts +42 -0
- package/dist/teams/drizzle.js +194 -0
- package/dist/teams/drizzle.js.map +1 -0
- package/dist/teams/index.d.ts +44 -0
- package/dist/teams/index.js +39 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/members-api.d.ts +152 -0
- package/dist/teams/members-api.js +261 -0
- package/dist/teams/members-api.js.map +1 -0
- package/dist/teams-react/index.d.ts +81 -0
- package/dist/teams-react/index.js +12 -0
- package/dist/teams-react/index.js.map +1 -0
- package/dist/teams-react/lazy.d.ts +9 -0
- package/dist/teams-react/lazy.js +13 -0
- package/dist/teams-react/lazy.js.map +1 -0
- package/dist/theme/index.d.ts +80 -0
- package/dist/theme/index.js +14 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/tailwind-preset.d.ts +65 -0
- package/dist/theme/tailwind-preset.js +33 -0
- package/dist/theme/tailwind-preset.js.map +1 -0
- package/dist/theme/tokens.css +95 -0
- package/dist/trace/index.d.ts +2 -18
- package/dist/trace/index.js +2 -2
- package/dist/web/index.d.ts +25 -2
- package/dist/web/index.js +3 -1
- package/dist/web-react/index.d.ts +71 -31
- package/dist/web-react/index.js +625 -486
- package/dist/web-react/index.js.map +1 -1
- package/package.json +53 -3
- package/dist/DesignCanvas-73IUJJUP.js +0 -10
- package/dist/DesignCanvasEditor-6F2UTOSW.js +0 -9
- package/dist/chunk-27LQXQSS.js.map +0 -1
- package/dist/chunk-5RT6KY4G.js.map +0 -1
- package/dist/chunk-6UOE5CTA.js.map +0 -1
- package/dist/chunk-AFDROJ64.js.map +0 -1
- package/dist/chunk-HABVCJJT.js.map +0 -1
- package/dist/chunk-JZAJE3JL.js.map +0 -1
- package/dist/chunk-LUE4HO5C.js.map +0 -1
- package/dist/chunk-RJ2ZHK5D.js.map +0 -1
- package/dist/chunk-SCG5JJ4C.js.map +0 -1
- package/dist/chunk-UDXMR3AD.js.map +0 -1
- /package/dist/{DesignCanvas-73IUJJUP.js.map → DesignCanvas-AOIVN3SJ.js.map} +0 -0
- /package/dist/{DesignCanvasEditor-6F2UTOSW.js.map → DesignCanvasEditor-IB2FMBBD.js.map} +0 -0
- /package/dist/{TimelineEditor-JDG54OBP.js.map → InviteAcceptPage-EUOGZO2X.js.map} +0 -0
- /package/dist/{chunk-7QCIYDGC.js.map → chunk-IOREXWLM.js.map} +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DesignCanvas,
|
|
3
|
+
DesignCanvas_default
|
|
4
|
+
} from "./chunk-YEWTVDDT.js";
|
|
5
|
+
import "./chunk-XWJXZ6WE.js";
|
|
6
|
+
import "./chunk-M2EBUDZ7.js";
|
|
7
|
+
import "./chunk-HFC4BTWJ.js";
|
|
8
|
+
export {
|
|
9
|
+
DesignCanvas,
|
|
10
|
+
DesignCanvas_default as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=DesignCanvas-AOIVN3SJ.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DesignCanvasEditor
|
|
3
|
+
} from "./chunk-N4ZFKQ5C.js";
|
|
4
|
+
import "./chunk-YEWTVDDT.js";
|
|
5
|
+
import "./chunk-V5XZKHCL.js";
|
|
6
|
+
import "./chunk-XWJXZ6WE.js";
|
|
7
|
+
import "./chunk-Y2SZVW35.js";
|
|
8
|
+
import "./chunk-M2EBUDZ7.js";
|
|
9
|
+
import "./chunk-HFC4BTWJ.js";
|
|
10
|
+
export {
|
|
11
|
+
DesignCanvasEditor
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=DesignCanvasEditor-IB2FMBBD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
SEQUENCE_MEDIA_DRAG_TYPE,
|
|
3
3
|
TimelineEditor,
|
|
4
4
|
TimelineEditor_default
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-S6WS2B32.js";
|
|
6
6
|
import "./chunk-ZYBWGSAZ.js";
|
|
7
7
|
export {
|
|
8
8
|
SEQUENCE_MEDIA_DRAG_TYPE,
|
|
9
9
|
TimelineEditor,
|
|
10
10
|
TimelineEditor_default as default
|
|
11
11
|
};
|
|
12
|
-
//# sourceMappingURL=TimelineEditor-
|
|
12
|
+
//# sourceMappingURL=TimelineEditor-Z7C6BFP5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
import * as drizzle_orm_sqlite_core from 'drizzle-orm/sqlite-core';
|
|
2
|
+
import { AnySQLiteTable, AnySQLiteColumn, BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
|
|
3
|
+
import { O as OrganizationRole, f as WorkspaceRole } from './roles-CLtYKHHl.js';
|
|
4
|
+
|
|
5
|
+
/** A product table referenced by FK — only the `id` column is touched. */
|
|
6
|
+
type TeamParentTable = AnySQLiteTable & {
|
|
7
|
+
id: AnySQLiteColumn;
|
|
8
|
+
};
|
|
9
|
+
interface CreateTeamTablesOptions {
|
|
10
|
+
/** The product's user table — org/member rows reference `userTable.id`. */
|
|
11
|
+
userTable: TeamParentTable;
|
|
12
|
+
/** The product's workspace table — workspace members reference `workspaceTable.id`. */
|
|
13
|
+
workspaceTable: TeamParentTable;
|
|
14
|
+
}
|
|
15
|
+
declare function createTeamTables(opts: CreateTeamTablesOptions): {
|
|
16
|
+
organizations: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
|
|
17
|
+
name: "organization";
|
|
18
|
+
schema: undefined;
|
|
19
|
+
columns: {
|
|
20
|
+
id: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
21
|
+
name: "id";
|
|
22
|
+
tableName: "organization";
|
|
23
|
+
dataType: "string";
|
|
24
|
+
columnType: "SQLiteText";
|
|
25
|
+
data: string;
|
|
26
|
+
driverParam: string;
|
|
27
|
+
notNull: true;
|
|
28
|
+
hasDefault: true;
|
|
29
|
+
isPrimaryKey: true;
|
|
30
|
+
isAutoincrement: false;
|
|
31
|
+
hasRuntimeDefault: false;
|
|
32
|
+
enumValues: [string, ...string[]];
|
|
33
|
+
baseColumn: never;
|
|
34
|
+
identity: undefined;
|
|
35
|
+
generated: undefined;
|
|
36
|
+
}, {}, {
|
|
37
|
+
length: number | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
name: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
40
|
+
name: "name";
|
|
41
|
+
tableName: "organization";
|
|
42
|
+
dataType: "string";
|
|
43
|
+
columnType: "SQLiteText";
|
|
44
|
+
data: string;
|
|
45
|
+
driverParam: string;
|
|
46
|
+
notNull: true;
|
|
47
|
+
hasDefault: false;
|
|
48
|
+
isPrimaryKey: false;
|
|
49
|
+
isAutoincrement: false;
|
|
50
|
+
hasRuntimeDefault: false;
|
|
51
|
+
enumValues: [string, ...string[]];
|
|
52
|
+
baseColumn: never;
|
|
53
|
+
identity: undefined;
|
|
54
|
+
generated: undefined;
|
|
55
|
+
}, {}, {
|
|
56
|
+
length: number | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
slug: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
59
|
+
name: "slug";
|
|
60
|
+
tableName: "organization";
|
|
61
|
+
dataType: "string";
|
|
62
|
+
columnType: "SQLiteText";
|
|
63
|
+
data: string;
|
|
64
|
+
driverParam: string;
|
|
65
|
+
notNull: true;
|
|
66
|
+
hasDefault: false;
|
|
67
|
+
isPrimaryKey: false;
|
|
68
|
+
isAutoincrement: false;
|
|
69
|
+
hasRuntimeDefault: false;
|
|
70
|
+
enumValues: [string, ...string[]];
|
|
71
|
+
baseColumn: never;
|
|
72
|
+
identity: undefined;
|
|
73
|
+
generated: undefined;
|
|
74
|
+
}, {}, {
|
|
75
|
+
length: number | undefined;
|
|
76
|
+
}>;
|
|
77
|
+
kind: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
78
|
+
name: "kind";
|
|
79
|
+
tableName: "organization";
|
|
80
|
+
dataType: "string";
|
|
81
|
+
columnType: "SQLiteText";
|
|
82
|
+
data: "personal" | "team";
|
|
83
|
+
driverParam: string;
|
|
84
|
+
notNull: true;
|
|
85
|
+
hasDefault: true;
|
|
86
|
+
isPrimaryKey: false;
|
|
87
|
+
isAutoincrement: false;
|
|
88
|
+
hasRuntimeDefault: false;
|
|
89
|
+
enumValues: ["personal", "team"];
|
|
90
|
+
baseColumn: never;
|
|
91
|
+
identity: undefined;
|
|
92
|
+
generated: undefined;
|
|
93
|
+
}, {}, {
|
|
94
|
+
length: number | undefined;
|
|
95
|
+
}>;
|
|
96
|
+
createdBy: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
97
|
+
name: "created_by";
|
|
98
|
+
tableName: "organization";
|
|
99
|
+
dataType: "string";
|
|
100
|
+
columnType: "SQLiteText";
|
|
101
|
+
data: string;
|
|
102
|
+
driverParam: string;
|
|
103
|
+
notNull: true;
|
|
104
|
+
hasDefault: false;
|
|
105
|
+
isPrimaryKey: false;
|
|
106
|
+
isAutoincrement: false;
|
|
107
|
+
hasRuntimeDefault: false;
|
|
108
|
+
enumValues: [string, ...string[]];
|
|
109
|
+
baseColumn: never;
|
|
110
|
+
identity: undefined;
|
|
111
|
+
generated: undefined;
|
|
112
|
+
}, {}, {
|
|
113
|
+
length: number | undefined;
|
|
114
|
+
}>;
|
|
115
|
+
createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
116
|
+
name: "created_at";
|
|
117
|
+
tableName: "organization";
|
|
118
|
+
dataType: "date";
|
|
119
|
+
columnType: "SQLiteTimestamp";
|
|
120
|
+
data: Date;
|
|
121
|
+
driverParam: number;
|
|
122
|
+
notNull: true;
|
|
123
|
+
hasDefault: true;
|
|
124
|
+
isPrimaryKey: false;
|
|
125
|
+
isAutoincrement: false;
|
|
126
|
+
hasRuntimeDefault: false;
|
|
127
|
+
enumValues: undefined;
|
|
128
|
+
baseColumn: never;
|
|
129
|
+
identity: undefined;
|
|
130
|
+
generated: undefined;
|
|
131
|
+
}, {}, {}>;
|
|
132
|
+
updatedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
133
|
+
name: "updated_at";
|
|
134
|
+
tableName: "organization";
|
|
135
|
+
dataType: "date";
|
|
136
|
+
columnType: "SQLiteTimestamp";
|
|
137
|
+
data: Date;
|
|
138
|
+
driverParam: number;
|
|
139
|
+
notNull: true;
|
|
140
|
+
hasDefault: true;
|
|
141
|
+
isPrimaryKey: false;
|
|
142
|
+
isAutoincrement: false;
|
|
143
|
+
hasRuntimeDefault: false;
|
|
144
|
+
enumValues: undefined;
|
|
145
|
+
baseColumn: never;
|
|
146
|
+
identity: undefined;
|
|
147
|
+
generated: undefined;
|
|
148
|
+
}, {}, {}>;
|
|
149
|
+
};
|
|
150
|
+
dialect: "sqlite";
|
|
151
|
+
}>;
|
|
152
|
+
organizationMembers: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
|
|
153
|
+
name: "organization_member";
|
|
154
|
+
schema: undefined;
|
|
155
|
+
columns: {
|
|
156
|
+
id: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
157
|
+
name: "id";
|
|
158
|
+
tableName: "organization_member";
|
|
159
|
+
dataType: "string";
|
|
160
|
+
columnType: "SQLiteText";
|
|
161
|
+
data: string;
|
|
162
|
+
driverParam: string;
|
|
163
|
+
notNull: true;
|
|
164
|
+
hasDefault: true;
|
|
165
|
+
isPrimaryKey: true;
|
|
166
|
+
isAutoincrement: false;
|
|
167
|
+
hasRuntimeDefault: false;
|
|
168
|
+
enumValues: [string, ...string[]];
|
|
169
|
+
baseColumn: never;
|
|
170
|
+
identity: undefined;
|
|
171
|
+
generated: undefined;
|
|
172
|
+
}, {}, {
|
|
173
|
+
length: number | undefined;
|
|
174
|
+
}>;
|
|
175
|
+
organizationId: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
176
|
+
name: "organization_id";
|
|
177
|
+
tableName: "organization_member";
|
|
178
|
+
dataType: "string";
|
|
179
|
+
columnType: "SQLiteText";
|
|
180
|
+
data: string;
|
|
181
|
+
driverParam: string;
|
|
182
|
+
notNull: true;
|
|
183
|
+
hasDefault: false;
|
|
184
|
+
isPrimaryKey: false;
|
|
185
|
+
isAutoincrement: false;
|
|
186
|
+
hasRuntimeDefault: false;
|
|
187
|
+
enumValues: [string, ...string[]];
|
|
188
|
+
baseColumn: never;
|
|
189
|
+
identity: undefined;
|
|
190
|
+
generated: undefined;
|
|
191
|
+
}, {}, {
|
|
192
|
+
length: number | undefined;
|
|
193
|
+
}>;
|
|
194
|
+
userId: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
195
|
+
name: "user_id";
|
|
196
|
+
tableName: "organization_member";
|
|
197
|
+
dataType: "string";
|
|
198
|
+
columnType: "SQLiteText";
|
|
199
|
+
data: string;
|
|
200
|
+
driverParam: string;
|
|
201
|
+
notNull: true;
|
|
202
|
+
hasDefault: false;
|
|
203
|
+
isPrimaryKey: false;
|
|
204
|
+
isAutoincrement: false;
|
|
205
|
+
hasRuntimeDefault: false;
|
|
206
|
+
enumValues: [string, ...string[]];
|
|
207
|
+
baseColumn: never;
|
|
208
|
+
identity: undefined;
|
|
209
|
+
generated: undefined;
|
|
210
|
+
}, {}, {
|
|
211
|
+
length: number | undefined;
|
|
212
|
+
}>;
|
|
213
|
+
role: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
214
|
+
name: "role";
|
|
215
|
+
tableName: "organization_member";
|
|
216
|
+
dataType: "string";
|
|
217
|
+
columnType: "SQLiteText";
|
|
218
|
+
data: "admin" | "owner" | "member" | "billing";
|
|
219
|
+
driverParam: string;
|
|
220
|
+
notNull: true;
|
|
221
|
+
hasDefault: true;
|
|
222
|
+
isPrimaryKey: false;
|
|
223
|
+
isAutoincrement: false;
|
|
224
|
+
hasRuntimeDefault: false;
|
|
225
|
+
enumValues: ["owner", "admin", "member", "billing"];
|
|
226
|
+
baseColumn: never;
|
|
227
|
+
identity: undefined;
|
|
228
|
+
generated: undefined;
|
|
229
|
+
}, {}, {
|
|
230
|
+
length: number | undefined;
|
|
231
|
+
}>;
|
|
232
|
+
createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
233
|
+
name: "created_at";
|
|
234
|
+
tableName: "organization_member";
|
|
235
|
+
dataType: "date";
|
|
236
|
+
columnType: "SQLiteTimestamp";
|
|
237
|
+
data: Date;
|
|
238
|
+
driverParam: number;
|
|
239
|
+
notNull: true;
|
|
240
|
+
hasDefault: true;
|
|
241
|
+
isPrimaryKey: false;
|
|
242
|
+
isAutoincrement: false;
|
|
243
|
+
hasRuntimeDefault: false;
|
|
244
|
+
enumValues: undefined;
|
|
245
|
+
baseColumn: never;
|
|
246
|
+
identity: undefined;
|
|
247
|
+
generated: undefined;
|
|
248
|
+
}, {}, {}>;
|
|
249
|
+
updatedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
250
|
+
name: "updated_at";
|
|
251
|
+
tableName: "organization_member";
|
|
252
|
+
dataType: "date";
|
|
253
|
+
columnType: "SQLiteTimestamp";
|
|
254
|
+
data: Date;
|
|
255
|
+
driverParam: number;
|
|
256
|
+
notNull: true;
|
|
257
|
+
hasDefault: true;
|
|
258
|
+
isPrimaryKey: false;
|
|
259
|
+
isAutoincrement: false;
|
|
260
|
+
hasRuntimeDefault: false;
|
|
261
|
+
enumValues: undefined;
|
|
262
|
+
baseColumn: never;
|
|
263
|
+
identity: undefined;
|
|
264
|
+
generated: undefined;
|
|
265
|
+
}, {}, {}>;
|
|
266
|
+
};
|
|
267
|
+
dialect: "sqlite";
|
|
268
|
+
}>;
|
|
269
|
+
workspaceMembers: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
|
|
270
|
+
name: "workspace_member";
|
|
271
|
+
schema: undefined;
|
|
272
|
+
columns: {
|
|
273
|
+
id: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
274
|
+
name: "id";
|
|
275
|
+
tableName: "workspace_member";
|
|
276
|
+
dataType: "string";
|
|
277
|
+
columnType: "SQLiteText";
|
|
278
|
+
data: string;
|
|
279
|
+
driverParam: string;
|
|
280
|
+
notNull: true;
|
|
281
|
+
hasDefault: true;
|
|
282
|
+
isPrimaryKey: true;
|
|
283
|
+
isAutoincrement: false;
|
|
284
|
+
hasRuntimeDefault: false;
|
|
285
|
+
enumValues: [string, ...string[]];
|
|
286
|
+
baseColumn: never;
|
|
287
|
+
identity: undefined;
|
|
288
|
+
generated: undefined;
|
|
289
|
+
}, {}, {
|
|
290
|
+
length: number | undefined;
|
|
291
|
+
}>;
|
|
292
|
+
workspaceId: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
293
|
+
name: "workspace_id";
|
|
294
|
+
tableName: "workspace_member";
|
|
295
|
+
dataType: "string";
|
|
296
|
+
columnType: "SQLiteText";
|
|
297
|
+
data: string;
|
|
298
|
+
driverParam: string;
|
|
299
|
+
notNull: true;
|
|
300
|
+
hasDefault: false;
|
|
301
|
+
isPrimaryKey: false;
|
|
302
|
+
isAutoincrement: false;
|
|
303
|
+
hasRuntimeDefault: false;
|
|
304
|
+
enumValues: [string, ...string[]];
|
|
305
|
+
baseColumn: never;
|
|
306
|
+
identity: undefined;
|
|
307
|
+
generated: undefined;
|
|
308
|
+
}, {}, {
|
|
309
|
+
length: number | undefined;
|
|
310
|
+
}>;
|
|
311
|
+
organizationMemberId: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
312
|
+
name: "organization_member_id";
|
|
313
|
+
tableName: "workspace_member";
|
|
314
|
+
dataType: "string";
|
|
315
|
+
columnType: "SQLiteText";
|
|
316
|
+
data: string;
|
|
317
|
+
driverParam: string;
|
|
318
|
+
notNull: false;
|
|
319
|
+
hasDefault: false;
|
|
320
|
+
isPrimaryKey: false;
|
|
321
|
+
isAutoincrement: false;
|
|
322
|
+
hasRuntimeDefault: false;
|
|
323
|
+
enumValues: [string, ...string[]];
|
|
324
|
+
baseColumn: never;
|
|
325
|
+
identity: undefined;
|
|
326
|
+
generated: undefined;
|
|
327
|
+
}, {}, {
|
|
328
|
+
length: number | undefined;
|
|
329
|
+
}>;
|
|
330
|
+
userId: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
331
|
+
name: "user_id";
|
|
332
|
+
tableName: "workspace_member";
|
|
333
|
+
dataType: "string";
|
|
334
|
+
columnType: "SQLiteText";
|
|
335
|
+
data: string;
|
|
336
|
+
driverParam: string;
|
|
337
|
+
notNull: false;
|
|
338
|
+
hasDefault: false;
|
|
339
|
+
isPrimaryKey: false;
|
|
340
|
+
isAutoincrement: false;
|
|
341
|
+
hasRuntimeDefault: false;
|
|
342
|
+
enumValues: [string, ...string[]];
|
|
343
|
+
baseColumn: never;
|
|
344
|
+
identity: undefined;
|
|
345
|
+
generated: undefined;
|
|
346
|
+
}, {}, {
|
|
347
|
+
length: number | undefined;
|
|
348
|
+
}>;
|
|
349
|
+
role: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
350
|
+
name: "role";
|
|
351
|
+
tableName: "workspace_member";
|
|
352
|
+
dataType: "string";
|
|
353
|
+
columnType: "SQLiteText";
|
|
354
|
+
data: "viewer" | "editor" | "admin" | "owner";
|
|
355
|
+
driverParam: string;
|
|
356
|
+
notNull: true;
|
|
357
|
+
hasDefault: true;
|
|
358
|
+
isPrimaryKey: false;
|
|
359
|
+
isAutoincrement: false;
|
|
360
|
+
hasRuntimeDefault: false;
|
|
361
|
+
enumValues: ["owner", "admin", "editor", "viewer"];
|
|
362
|
+
baseColumn: never;
|
|
363
|
+
identity: undefined;
|
|
364
|
+
generated: undefined;
|
|
365
|
+
}, {}, {
|
|
366
|
+
length: number | undefined;
|
|
367
|
+
}>;
|
|
368
|
+
invitedBy: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
369
|
+
name: "invited_by";
|
|
370
|
+
tableName: "workspace_member";
|
|
371
|
+
dataType: "string";
|
|
372
|
+
columnType: "SQLiteText";
|
|
373
|
+
data: string;
|
|
374
|
+
driverParam: string;
|
|
375
|
+
notNull: false;
|
|
376
|
+
hasDefault: false;
|
|
377
|
+
isPrimaryKey: false;
|
|
378
|
+
isAutoincrement: false;
|
|
379
|
+
hasRuntimeDefault: false;
|
|
380
|
+
enumValues: [string, ...string[]];
|
|
381
|
+
baseColumn: never;
|
|
382
|
+
identity: undefined;
|
|
383
|
+
generated: undefined;
|
|
384
|
+
}, {}, {
|
|
385
|
+
length: number | undefined;
|
|
386
|
+
}>;
|
|
387
|
+
inviteEmail: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
388
|
+
name: "invite_email";
|
|
389
|
+
tableName: "workspace_member";
|
|
390
|
+
dataType: "string";
|
|
391
|
+
columnType: "SQLiteText";
|
|
392
|
+
data: string;
|
|
393
|
+
driverParam: string;
|
|
394
|
+
notNull: false;
|
|
395
|
+
hasDefault: false;
|
|
396
|
+
isPrimaryKey: false;
|
|
397
|
+
isAutoincrement: false;
|
|
398
|
+
hasRuntimeDefault: false;
|
|
399
|
+
enumValues: [string, ...string[]];
|
|
400
|
+
baseColumn: never;
|
|
401
|
+
identity: undefined;
|
|
402
|
+
generated: undefined;
|
|
403
|
+
}, {}, {
|
|
404
|
+
length: number | undefined;
|
|
405
|
+
}>;
|
|
406
|
+
inviteToken: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
407
|
+
name: "invite_token";
|
|
408
|
+
tableName: "workspace_member";
|
|
409
|
+
dataType: "string";
|
|
410
|
+
columnType: "SQLiteText";
|
|
411
|
+
data: string;
|
|
412
|
+
driverParam: string;
|
|
413
|
+
notNull: false;
|
|
414
|
+
hasDefault: false;
|
|
415
|
+
isPrimaryKey: false;
|
|
416
|
+
isAutoincrement: false;
|
|
417
|
+
hasRuntimeDefault: false;
|
|
418
|
+
enumValues: [string, ...string[]];
|
|
419
|
+
baseColumn: never;
|
|
420
|
+
identity: undefined;
|
|
421
|
+
generated: undefined;
|
|
422
|
+
}, {}, {
|
|
423
|
+
length: number | undefined;
|
|
424
|
+
}>;
|
|
425
|
+
invitedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
426
|
+
name: "invited_at";
|
|
427
|
+
tableName: "workspace_member";
|
|
428
|
+
dataType: "date";
|
|
429
|
+
columnType: "SQLiteTimestamp";
|
|
430
|
+
data: Date;
|
|
431
|
+
driverParam: number;
|
|
432
|
+
notNull: true;
|
|
433
|
+
hasDefault: true;
|
|
434
|
+
isPrimaryKey: false;
|
|
435
|
+
isAutoincrement: false;
|
|
436
|
+
hasRuntimeDefault: false;
|
|
437
|
+
enumValues: undefined;
|
|
438
|
+
baseColumn: never;
|
|
439
|
+
identity: undefined;
|
|
440
|
+
generated: undefined;
|
|
441
|
+
}, {}, {}>;
|
|
442
|
+
acceptedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
|
|
443
|
+
name: "accepted_at";
|
|
444
|
+
tableName: "workspace_member";
|
|
445
|
+
dataType: "date";
|
|
446
|
+
columnType: "SQLiteTimestamp";
|
|
447
|
+
data: Date;
|
|
448
|
+
driverParam: number;
|
|
449
|
+
notNull: false;
|
|
450
|
+
hasDefault: false;
|
|
451
|
+
isPrimaryKey: false;
|
|
452
|
+
isAutoincrement: false;
|
|
453
|
+
hasRuntimeDefault: false;
|
|
454
|
+
enumValues: undefined;
|
|
455
|
+
baseColumn: never;
|
|
456
|
+
identity: undefined;
|
|
457
|
+
generated: undefined;
|
|
458
|
+
}, {}, {}>;
|
|
459
|
+
};
|
|
460
|
+
dialect: "sqlite";
|
|
461
|
+
}>;
|
|
462
|
+
};
|
|
463
|
+
type TeamTables = ReturnType<typeof createTeamTables>;
|
|
464
|
+
type OrganizationRow = TeamTables['organizations']['$inferSelect'];
|
|
465
|
+
type OrganizationMemberRow = TeamTables['organizationMembers']['$inferSelect'];
|
|
466
|
+
type WorkspaceMemberRow = TeamTables['workspaceMembers']['$inferSelect'];
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* RBAC access builders over the teams tables. `createWorkspaceAccess` and
|
|
470
|
+
* `createOrganizationAccess` close over the product's `db`, the tables from
|
|
471
|
+
* `createTeamTables`, and the product's `workspace` table, returning the exact
|
|
472
|
+
* `getWorkspaceAccess` / `requireWorkspaceAccess` / `listUserWorkspaces` /
|
|
473
|
+
* `getOrganizationAccess` / `requireOrganizationAccess` functions a consumer
|
|
474
|
+
* already calls — so adoption is a one-line import swap, every call site stays
|
|
475
|
+
* identical.
|
|
476
|
+
*
|
|
477
|
+
* Defense in depth: org owners/admins are workspace owners across the org;
|
|
478
|
+
* everyone else gets their explicit per-workspace role. Effective role is the
|
|
479
|
+
* fold in `resolveWorkspaceRole` (pure, from `../roles`). Every query pins
|
|
480
|
+
* `userId`, so a leaked id can never read across the tenancy boundary — it
|
|
481
|
+
* surfaces as "not found".
|
|
482
|
+
*
|
|
483
|
+
* Driver-agnostic: builders are awaited, never `.run()`/`.all()`, so
|
|
484
|
+
* better-sqlite3, D1, and libsql handles all behave identically.
|
|
485
|
+
*/
|
|
486
|
+
|
|
487
|
+
/** Any SQLite drizzle database — `any` erases driver-specific generics so
|
|
488
|
+
* better-sqlite3, D1, and libsql handles all fit. */
|
|
489
|
+
type TeamDatabase = BaseSQLiteDatabase<'sync' | 'async', any, any>;
|
|
490
|
+
/**
|
|
491
|
+
* The product's workspace table, narrowed to the columns the access joins read.
|
|
492
|
+
* Adopters pass their real drizzle workspace table — it carries these columns
|
|
493
|
+
* (gtm's does); the type only asserts the minimum the joins touch.
|
|
494
|
+
*/
|
|
495
|
+
interface WorkspaceAccessTable {
|
|
496
|
+
id: any;
|
|
497
|
+
organizationId: any;
|
|
498
|
+
name: any;
|
|
499
|
+
updatedAt: any;
|
|
500
|
+
}
|
|
501
|
+
interface CreateAccessOptions {
|
|
502
|
+
db: TeamDatabase;
|
|
503
|
+
tables: TeamTables;
|
|
504
|
+
/** The product's workspace table (the FK target passed to createTeamTables). */
|
|
505
|
+
workspaceTable: TeamParentTable & WorkspaceAccessTable;
|
|
506
|
+
}
|
|
507
|
+
interface WorkspaceAccess {
|
|
508
|
+
workspace: Record<string, unknown>;
|
|
509
|
+
organization: OrganizationRow;
|
|
510
|
+
organizationMember: OrganizationMemberRow;
|
|
511
|
+
role: WorkspaceRole;
|
|
512
|
+
}
|
|
513
|
+
interface UserWorkspaceSummary extends Record<string, unknown> {
|
|
514
|
+
organizationId: string;
|
|
515
|
+
organizationName: string;
|
|
516
|
+
role: WorkspaceRole;
|
|
517
|
+
}
|
|
518
|
+
interface WorkspaceAccessApi {
|
|
519
|
+
getWorkspaceAccess(workspaceId: string, userId: string, minRole?: WorkspaceRole): Promise<WorkspaceAccess | null>;
|
|
520
|
+
requireWorkspaceAccess(workspaceId: string, userId: string, minRole?: WorkspaceRole): Promise<WorkspaceAccess>;
|
|
521
|
+
listUserWorkspaces(userId: string): Promise<UserWorkspaceSummary[]>;
|
|
522
|
+
}
|
|
523
|
+
declare function createWorkspaceAccess(opts: CreateAccessOptions): WorkspaceAccessApi;
|
|
524
|
+
interface OrganizationAccess {
|
|
525
|
+
organization: OrganizationRow;
|
|
526
|
+
member: OrganizationMemberRow;
|
|
527
|
+
role: OrganizationRole;
|
|
528
|
+
}
|
|
529
|
+
interface OrganizationAccessApi {
|
|
530
|
+
getOrganizationAccess(organizationId: string, userId: string, minRole?: OrganizationRole): Promise<OrganizationAccess | null>;
|
|
531
|
+
requireOrganizationAccess(organizationId: string, userId: string, minRole?: OrganizationRole): Promise<OrganizationAccess>;
|
|
532
|
+
}
|
|
533
|
+
interface CreateOrganizationAccessOptions {
|
|
534
|
+
db: TeamDatabase;
|
|
535
|
+
tables: TeamTables;
|
|
536
|
+
}
|
|
537
|
+
declare function createOrganizationAccess(opts: CreateOrganizationAccessOptions): OrganizationAccessApi;
|
|
538
|
+
|
|
539
|
+
export { type CreateAccessOptions as C, type OrganizationRow as O, type TeamDatabase as T, type UserWorkspaceSummary as U, type WorkspaceAccess as W, type TeamTables as a, type OrganizationMemberRow as b, type CreateOrganizationAccessOptions as c, type CreateTeamTablesOptions as d, type OrganizationAccess as e, type OrganizationAccessApi as f, type TeamParentTable as g, type WorkspaceAccessApi as h, type WorkspaceAccessTable as i, type WorkspaceMemberRow as j, createOrganizationAccess as k, createTeamTables as l, createWorkspaceAccess as m };
|
|
@@ -192,7 +192,9 @@ declare function lastClipEndFrame(timeline: SequenceTimeline): number;
|
|
|
192
192
|
/** Media references must be provider URLs or app-served paths. Local sandbox
|
|
193
193
|
* artifacts (file:, data:, /tmp/, /home/) are rejected because they are
|
|
194
194
|
* unreachable from the product and signal an agent substituting local ffmpeg
|
|
195
|
-
* output for real provider generation.
|
|
195
|
+
* output for real provider generation. Delegates to the canonical
|
|
196
|
+
* `assertMediaUrl` boundary in `../web` — sequences and design-canvas share ONE
|
|
197
|
+
* rule so the two surfaces cannot drift on what counts as a reachable url. */
|
|
196
198
|
declare function assertSequenceMediaUrl(url: string): void;
|
|
197
199
|
|
|
198
200
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/trace/mission-flow.ts"],"sourcesContent":["/**\n * Delegation → FlowSpan converters — render what a mission's delegated agent\n * runs actually did as ONE FlowTrace, drawable by the existing\n * `renderWaterfall` (or any viewer that consumes FlowSpans).\n *\n * Two fidelities, one tree:\n * - COARSE: `delegationActivityToFlowSpans` draws one 'tool' span per\n * delegation from the StepAgentActivity snapshot (startedAt/durationMs) —\n * available live, from the step's journaled lane.\n * - FINE: `loopTraceEventsToFlowSpans` reconstructs agent-runtime's\n * loop → round → iteration hierarchy from the LoopTraceEvent journal a\n * delegation persists. FlowSpans carry no parent ids, so nesting rides the\n * span NAME (`loop ▸ round 0 ▸ iter 1 (coder)`), matching how the ASCII\n * waterfall reads.\n *\n * `composeMissionFlowTrace` lays a whole mission out: one 'pipeline' span per\n * step, each step's delegations beneath it. Pure data transforms — the\n * structural `LoopTraceEventLike` keeps this module free of the optional\n * agent-runtime peer.\n */\n\nimport type { StepAgentActivity } from '../missions/agent-activity'\nimport type { FlowSpan, FlowTrace } from './flow-types'\n\n/** Structural mirror of agent-runtime's `LoopTraceEvent` — same fields, no\n * import, so journals parsed from JSON feed straight in. */\nexport interface LoopTraceEventLike {\n kind: string\n runId: string\n /** Epoch ms. */\n timestamp: number\n payload: object\n}\n\nconst num = (v: unknown): number | undefined =>\n typeof v === 'number' && Number.isFinite(v) ? v : undefined\nconst str = (v: unknown): string | undefined =>\n typeof v === 'string' && v.length > 0 ? v : undefined\nconst rec = (v: unknown): Record<string, unknown> =>\n v && typeof v === 'object' ? (v as Record<string, unknown>) : {}\n\n/** Statuses that mean the delegation is still producing wall time. */\nconst LIVE_DELEGATION_STATUSES = new Set(['pending', 'running'])\n\n/**\n * One 'tool' FlowSpan per delegation, positioned relative to `turnStartMs`\n * (the epoch-ms origin of the trace — usually the step or mission start).\n * A row whose `startedAt` does not parse cannot be placed on a timeline and\n * is omitted from the WATERFALL (it stays in the lane itself). A run without\n * `durationMs` is still in flight: its span extends to `opts.nowMs` when\n * given, else renders as a point — `approx` flags both.\n */\nexport function delegationActivityToFlowSpans(\n activity: StepAgentActivity[],\n turnStartMs: number,\n opts?: { nowMs?: number },\n): FlowSpan[] {\n const spans: FlowSpan[] = []\n for (const run of activity) {\n const startedAt = Date.parse(run.startedAt)\n if (!Number.isFinite(startedAt)) continue\n const startMs = startedAt - turnStartMs\n const live = LIVE_DELEGATION_STATUSES.has(run.status)\n const endMs =\n run.durationMs !== undefined\n ? startMs + run.durationMs\n : live && opts?.nowMs !== undefined\n ? opts.nowMs - turnStartMs\n : startMs\n spans.push({\n kind: 'tool',\n name: `${run.tool} — ${run.detail}`,\n startMs,\n endMs: Math.max(endMs, startMs),\n ...(run.durationMs === undefined ? { approx: true } : {}),\n meta: {\n taskId: run.taskId,\n status: run.status,\n ...(run.costUsd !== undefined ? { costUsd: run.costUsd } : {}),\n ...(run.iteration !== undefined ? { iteration: run.iteration } : {}),\n ...(run.phase !== undefined ? { phase: run.phase } : {}),\n ...(run.traceId !== undefined ? { traceId: run.traceId } : {}),\n ...(run.spanId !== undefined ? { spanId: run.spanId } : {}),\n },\n })\n }\n return spans\n}\n\n/**\n * Reconstruct one delegation's loop → round → iteration tree from its\n * journaled LoopTraceEvents, as FlowSpans relative to `loop.started` (or the\n * first event). Mirrors agent-runtime's `buildLoopOtelSpans` topology:\n * rounds open on `loop.plan` and flush on the next plan / `loop.decision` /\n * `loop.ended`; iterations span `loop.iteration.started` → `.ended`.\n */\nexport function loopTraceEventsToFlowSpans(events: LoopTraceEventLike[]): FlowSpan[] {\n if (events.length === 0) return []\n const ordered = [...events].sort((a, b) => a.timestamp - b.timestamp)\n const started = ordered.find((e) => e.kind === 'loop.started')\n const ended = ordered.find((e) => e.kind === 'loop.ended')\n const origin = started?.timestamp ?? ordered[0]!.timestamp\n const rootEnd = ended?.timestamp ?? ordered[ordered.length - 1]!.timestamp\n const t = (epochMs: number) => epochMs - origin\n\n const spans: FlowSpan[] = []\n const sp = rec(started?.payload)\n const ep = rec(ended?.payload)\n spans.push({\n kind: 'pipeline',\n name: 'loop',\n startMs: 0,\n endMs: t(rootEnd),\n meta: {\n runId: ordered[0]!.runId,\n ...(str(sp.driver) !== undefined ? { driver: str(sp.driver) } : {}),\n ...(num(ep.totalCostUsd) !== undefined ? { costUsd: num(ep.totalCostUsd) } : {}),\n ...(num(ep.winnerIterationIndex) !== undefined\n ? { winnerIterationIndex: num(ep.winnerIterationIndex) }\n : {}),\n ...(num(ep.iterations) !== undefined ? { iterations: num(ep.iterations) } : {}),\n },\n })\n\n const iterStart = new Map<number, number>()\n let round: { index: number; startMs: number; meta: Record<string, unknown>; moveKind: string } | undefined\n const flushRound = (endEpochMs: number) => {\n if (!round) return\n spans.push({\n kind: 'pipeline',\n name: `loop ▸ round ${round.index} (${round.moveKind})`,\n startMs: round.startMs,\n endMs: t(endEpochMs),\n meta: round.meta,\n })\n round = undefined\n }\n\n for (const e of ordered) {\n const p = rec(e.payload)\n switch (e.kind) {\n case 'loop.plan': {\n flushRound(e.timestamp)\n const index = num(p.roundIndex) ?? 0\n round = {\n index,\n startMs: t(e.timestamp),\n moveKind: str(p.moveKind) ?? 'unknown',\n meta: {\n roundIndex: index,\n moveKind: str(p.moveKind) ?? 'unknown',\n width: num(p.plannedCount) ?? 0,\n ...(str(p.rationale) !== undefined ? { rationale: str(p.rationale) } : {}),\n ...(num(p.parentIndex) !== undefined ? { parentIndex: num(p.parentIndex) } : {}),\n },\n }\n break\n }\n case 'loop.iteration.started': {\n const idx = num(p.iterationIndex)\n if (idx !== undefined) iterStart.set(idx, e.timestamp)\n break\n }\n case 'loop.iteration.ended': {\n const idx = num(p.iterationIndex) ?? 0\n const startEpoch = iterStart.get(idx) ?? e.timestamp\n const error = str(p.error)\n const verdict = rec(p.verdict)\n const tokens = rec(p.tokenUsage)\n const roundLabel = round ? `round ${round.index} ▸ ` : ''\n spans.push({\n kind: 'model',\n name: `loop ▸ ${roundLabel}iter ${idx} (${str(p.agentRunName) ?? 'agent'})`,\n startMs: t(startEpoch),\n endMs: t(e.timestamp),\n meta: {\n iterationIndex: idx,\n ok: error === undefined,\n ...(error !== undefined ? { error } : {}),\n ...(num(p.costUsd) !== undefined ? { costUsd: num(p.costUsd) } : {}),\n ...(typeof verdict.valid === 'boolean' ? { verdictValid: verdict.valid } : {}),\n ...(num(verdict.score) !== undefined ? { verdictScore: num(verdict.score) } : {}),\n ...(num(tokens.input) !== undefined ? { inputTokens: num(tokens.input) } : {}),\n ...(num(tokens.output) !== undefined ? { outputTokens: num(tokens.output) } : {}),\n },\n })\n break\n }\n case 'loop.decision': {\n if (round) {\n const decision = str(p.decision)\n if (decision !== undefined) round.meta.decision = decision\n flushRound(e.timestamp)\n }\n break\n }\n }\n }\n flushRound(rootEnd)\n return spans\n}\n\n/**\n * A single step's activity lane as its own FlowTrace — what a per-step\n * drill-in renders. Origin defaults to the earliest delegation start so the\n * waterfall begins at the lane's first run.\n */\nexport function stepActivityFlowTrace(\n activity: StepAgentActivity[],\n opts?: { startedAt?: number; nowMs?: number },\n): FlowTrace {\n let origin = opts?.startedAt\n if (origin === undefined) {\n for (const run of activity) {\n const parsed = Date.parse(run.startedAt)\n if (Number.isFinite(parsed) && (origin === undefined || parsed < origin)) origin = parsed\n }\n }\n const spans = delegationActivityToFlowSpans(\n activity,\n origin ?? 0,\n opts?.nowMs !== undefined ? { nowMs: opts.nowMs } : undefined,\n )\n let costUsd: number | undefined\n for (const span of spans) {\n const c = num(rec(span.meta).costUsd)\n if (c !== undefined) costUsd = (costUsd ?? 0) + c\n }\n return {\n spans,\n totalMs: spans.reduce((max, s) => Math.max(max, s.endMs), 0),\n promptTokens: 0,\n completionTokens: 0,\n ...(costUsd !== undefined ? { costUsd } : {}),\n toolCalls: spans.length,\n }\n}\n\nexport interface MissionFlowStep {\n id: string\n intent: string\n status?: string\n /** Epoch ms the step attempt started. Absent → laid out sequentially after\n * the previous step (missions run steps in order), `approx` flagged. */\n startedAt?: number\n durationMs?: number\n}\n\n/**\n * Compose a mission-wide FlowTrace: one 'pipeline' span per step, the step's\n * delegated runs ('tool' spans, from `activity[stepId]`) beneath it. A step\n * span always covers its delegations' extent. Cost is the sum of delegation\n * `costUsd`; token counts are not knowable from the activity lane and stay 0.\n */\nexport function composeMissionFlowTrace(input: {\n steps: MissionFlowStep[]\n /** Delegated-run snapshots keyed by step id (the step's `agentActivity`). */\n activity?: Record<string, StepAgentActivity[]>\n /** Epoch-ms origin. Default: the earliest known step/delegation start. */\n startedAt?: number\n}): FlowTrace {\n const activity = input.activity ?? {}\n\n const startCandidates: number[] = []\n if (input.startedAt !== undefined) startCandidates.push(input.startedAt)\n else {\n for (const step of input.steps) {\n if (step.startedAt !== undefined) startCandidates.push(step.startedAt)\n }\n for (const runs of Object.values(activity)) {\n for (const run of runs) {\n const parsed = Date.parse(run.startedAt)\n if (Number.isFinite(parsed)) startCandidates.push(parsed)\n }\n }\n }\n const origin = startCandidates.length > 0 ? Math.min(...startCandidates) : 0\n\n const spans: FlowSpan[] = []\n let costUsd: number | undefined\n let toolCalls = 0\n let cursorMs = 0\n\n for (const step of input.steps) {\n const inferred = step.startedAt === undefined\n const startMs = inferred ? cursorMs : step.startedAt! - origin\n const runSpans = delegationActivityToFlowSpans(activity[step.id] ?? [], origin)\n const runExtent = runSpans.reduce((max, s) => Math.max(max, s.endMs), startMs)\n const endMs = Math.max(step.durationMs !== undefined ? startMs + step.durationMs : startMs, runExtent)\n\n spans.push({\n kind: 'pipeline',\n name: step.intent,\n startMs,\n endMs,\n ...(inferred || step.durationMs === undefined ? { approx: true } : {}),\n meta: { stepId: step.id, ...(step.status !== undefined ? { status: step.status } : {}) },\n })\n for (const span of runSpans) {\n spans.push({ ...span, name: `${step.intent} ▸ ${span.name}` })\n toolCalls++\n const c = num(rec(span.meta).costUsd)\n if (c !== undefined) costUsd = (costUsd ?? 0) + c\n }\n cursorMs = endMs\n }\n\n return {\n spans,\n totalMs: spans.reduce((max, s) => Math.max(max, s.endMs), 0),\n promptTokens: 0,\n completionTokens: 0,\n ...(costUsd !== undefined ? { costUsd } : {}),\n toolCalls,\n }\n}\n"],"mappings":"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","names":[]}
|