@firedrill-tools/notion 0.1.1

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.
Files changed (65) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +402 -0
  3. package/firedrill/agent.target.json +17 -0
  4. package/firedrill/baseline.scenario.json +5 -0
  5. package/firedrill/bounded.scenario.json +19 -0
  6. package/firedrill/conformance.suite.json +23 -0
  7. package/firedrill/notion-bounded.drill.json +318 -0
  8. package/firedrill/notion-byte-budget.drill.json +116 -0
  9. package/firedrill/notion-mcp-aliases.drill.json +150 -0
  10. package/firedrill/notion-page-authoring.drill.json +254 -0
  11. package/firedrill/notion-rate-limited.drill.json +118 -0
  12. package/firedrill/notion-schema-growth.drill.json +88 -0
  13. package/firedrill/notion-scope-agent-only.drill.json +131 -0
  14. package/firedrill/notion-scope-auditor.drill.json +86 -0
  15. package/firedrill/notion-scope-board-bot.drill.json +128 -0
  16. package/firedrill/notion-scope-notes-bot.drill.json +303 -0
  17. package/firedrill/notion-scope-stranger.drill.json +773 -0
  18. package/firedrill/notion-task-triage.drill.json +277 -0
  19. package/firedrill/notion-trash-and-restore.drill.json +186 -0
  20. package/firedrill/notion-update-lost.drill.json +88 -0
  21. package/firedrill/notion-workspace-read.drill.json +258 -0
  22. package/firedrill/notion-write-unavailable.drill.json +161 -0
  23. package/firedrill/rate-limited.scenario.json +11 -0
  24. package/firedrill/tools/notion/app/assets/ATTRIBUTION.md +35 -0
  25. package/firedrill/tools/notion/app/assets/fonts/OFL.txt +93 -0
  26. package/firedrill/tools/notion/app/assets/fonts/inter-latin.woff2 +0 -0
  27. package/firedrill/tools/notion/app/assets/notion-wordmark.svg +1 -0
  28. package/firedrill/tools/notion/app/assets/notion.svg +1 -0
  29. package/firedrill/tools/notion/app/site/app.js +797 -0
  30. package/firedrill/tools/notion/app/site/assets/fonts/inter-latin.woff2 +0 -0
  31. package/firedrill/tools/notion/app/site/assets/notion-wordmark.svg +1 -0
  32. package/firedrill/tools/notion/app/site/assets/notion.svg +1 -0
  33. package/firedrill/tools/notion/app/site/chrome.js +104 -0
  34. package/firedrill/tools/notion/app/site/cover-picker.js +83 -0
  35. package/firedrill/tools/notion/app/site/database.js +648 -0
  36. package/firedrill/tools/notion/app/site/editors.js +320 -0
  37. package/firedrill/tools/notion/app/site/format-bar.js +97 -0
  38. package/firedrill/tools/notion/app/site/icons.js +131 -0
  39. package/firedrill/tools/notion/app/site/index.html +125 -0
  40. package/firedrill/tools/notion/app/site/page.js +826 -0
  41. package/firedrill/tools/notion/app/site/rich.js +159 -0
  42. package/firedrill/tools/notion/app/site/state.js +170 -0
  43. package/firedrill/tools/notion/app/site/styles.css +826 -0
  44. package/firedrill/tools/notion/app/site/ui.js +418 -0
  45. package/firedrill/tools/notion/behavior.mjs +1123 -0
  46. package/firedrill/tools/notion/lib/blocks.mjs +371 -0
  47. package/firedrill/tools/notion/lib/identity.mjs +123 -0
  48. package/firedrill/tools/notion/lib/ids.mjs +63 -0
  49. package/firedrill/tools/notion/lib/json-depth.mjs +26 -0
  50. package/firedrill/tools/notion/lib/markdown.mjs +381 -0
  51. package/firedrill/tools/notion/lib/properties.mjs +513 -0
  52. package/firedrill/tools/notion/lib/query.mjs +272 -0
  53. package/firedrill/tools/notion/lib/render.mjs +137 -0
  54. package/firedrill/tools/notion/lib/rich-text.mjs +134 -0
  55. package/firedrill/tools/notion/lib/size.mjs +44 -0
  56. package/firedrill/tools/notion/lib/state.mjs +192 -0
  57. package/firedrill/tools/notion/lib/wire.mjs +89 -0
  58. package/firedrill/tools/notion/notion.tool.json +9837 -0
  59. package/firedrill/update-lost.scenario.json +11 -0
  60. package/firedrill/world.json +7039 -0
  61. package/firedrill/write-unavailable.scenario.json +11 -0
  62. package/firedrill.json +5 -0
  63. package/package.json +63 -0
  64. package/starter.json +6482 -0
  65. package/test/conformance.mjs +1186 -0
@@ -0,0 +1,277 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "notion-task-triage",
4
+ "title": "Query the Tasks data source with real filters and sorts, then create, update, move and comment on a task",
5
+ "targetId": "conformance-agent",
6
+ "scenarioId": "baseline",
7
+ "actorId": "member",
8
+ "task": {
9
+ "instruction": "Run the task-triage conformance flow against the synthetic Notion Tool and fail loudly on any unexpected status, header or body."
10
+ },
11
+ "assertions": [
12
+ {
13
+ "id": "data-sources-query-ok",
14
+ "kind": "operation.count",
15
+ "operation": {
16
+ "packageId": "notion",
17
+ "operationId": "data-sources.query"
18
+ },
19
+ "outcomes": [
20
+ "ok"
21
+ ],
22
+ "comparison": {
23
+ "operator": "greater_than_or_equal",
24
+ "value": 12
25
+ }
26
+ },
27
+ {
28
+ "id": "data-sources-query-validation-errors",
29
+ "kind": "operation.count",
30
+ "operation": {
31
+ "packageId": "notion",
32
+ "operationId": "data-sources.query"
33
+ },
34
+ "outcomes": [
35
+ "tool_error"
36
+ ],
37
+ "comparison": {
38
+ "operator": "greater_than_or_equal",
39
+ "value": 3
40
+ }
41
+ },
42
+ {
43
+ "id": "pages-create-ok",
44
+ "kind": "operation.count",
45
+ "operation": {
46
+ "packageId": "notion",
47
+ "operationId": "pages.create"
48
+ },
49
+ "outcomes": [
50
+ "ok"
51
+ ],
52
+ "comparison": {
53
+ "operator": "greater_than_or_equal",
54
+ "value": 1
55
+ }
56
+ },
57
+ {
58
+ "id": "pages-update-ok",
59
+ "kind": "operation.count",
60
+ "operation": {
61
+ "packageId": "notion",
62
+ "operationId": "pages.update"
63
+ },
64
+ "outcomes": [
65
+ "ok"
66
+ ],
67
+ "comparison": {
68
+ "operator": "greater_than_or_equal",
69
+ "value": 1
70
+ }
71
+ },
72
+ {
73
+ "id": "pages-move-ok",
74
+ "kind": "operation.count",
75
+ "operation": {
76
+ "packageId": "notion",
77
+ "operationId": "pages.move"
78
+ },
79
+ "outcomes": [
80
+ "ok"
81
+ ],
82
+ "comparison": {
83
+ "operator": "greater_than_or_equal",
84
+ "value": 2
85
+ }
86
+ },
87
+ {
88
+ "id": "comments-create-ok",
89
+ "kind": "operation.count",
90
+ "operation": {
91
+ "packageId": "notion",
92
+ "operationId": "comments.create"
93
+ },
94
+ "outcomes": [
95
+ "ok"
96
+ ],
97
+ "comparison": {
98
+ "operator": "greater_than_or_equal",
99
+ "value": 2
100
+ }
101
+ },
102
+ {
103
+ "id": "comments-list-ok",
104
+ "kind": "operation.count",
105
+ "operation": {
106
+ "packageId": "notion",
107
+ "operationId": "comments.list"
108
+ },
109
+ "outcomes": [
110
+ "ok"
111
+ ],
112
+ "comparison": {
113
+ "operator": "greater_than_or_equal",
114
+ "value": 1
115
+ }
116
+ },
117
+ {
118
+ "id": "new-task-title",
119
+ "kind": "state.value",
120
+ "packageId": "notion",
121
+ "namespace": "pages",
122
+ "rowId": "fd000000-0000-4000-8000-000200001002",
123
+ "path": [
124
+ "title_plain"
125
+ ],
126
+ "comparison": {
127
+ "operator": "equals",
128
+ "value": "Bench-test the OTA rollback"
129
+ }
130
+ },
131
+ {
132
+ "id": "new-task-back-in-tasks",
133
+ "kind": "state.value",
134
+ "packageId": "notion",
135
+ "namespace": "pages",
136
+ "rowId": "fd000000-0000-4000-8000-000200001002",
137
+ "path": [
138
+ "parent",
139
+ "type"
140
+ ],
141
+ "comparison": {
142
+ "operator": "equals",
143
+ "value": "data_source_id"
144
+ }
145
+ },
146
+ {
147
+ "id": "new-task-status-reset-by-move",
148
+ "kind": "state.value",
149
+ "packageId": "notion",
150
+ "namespace": "pages",
151
+ "rowId": "fd000000-0000-4000-8000-000200001002",
152
+ "path": [
153
+ "properties",
154
+ "Status",
155
+ "value"
156
+ ],
157
+ "comparison": {
158
+ "operator": "equals",
159
+ "value": null
160
+ }
161
+ },
162
+ {
163
+ "id": "t3-untouched",
164
+ "kind": "state.value",
165
+ "packageId": "notion",
166
+ "namespace": "pages",
167
+ "rowId": "fd000000-0000-4000-8000-000200000122",
168
+ "path": [
169
+ "properties",
170
+ "Status",
171
+ "value",
172
+ "name"
173
+ ],
174
+ "comparison": {
175
+ "operator": "equals",
176
+ "value": "Todo"
177
+ }
178
+ },
179
+ {
180
+ "id": "pages-plus-one",
181
+ "kind": "state.count",
182
+ "packageId": "notion",
183
+ "namespace": "pages",
184
+ "comparison": {
185
+ "operator": "equals",
186
+ "value": 29
187
+ }
188
+ },
189
+ {
190
+ "id": "comments-plus-two",
191
+ "kind": "state.count",
192
+ "packageId": "notion",
193
+ "namespace": "comments",
194
+ "comparison": {
195
+ "operator": "equals",
196
+ "value": 8
197
+ }
198
+ },
199
+ {
200
+ "id": "page-created-events",
201
+ "kind": "event.count",
202
+ "event": {
203
+ "packageId": "notion",
204
+ "eventId": "page.created"
205
+ },
206
+ "phase": "emitted",
207
+ "comparison": {
208
+ "operator": "equals",
209
+ "value": 1
210
+ }
211
+ },
212
+ {
213
+ "id": "page-properties-updated-events",
214
+ "kind": "event.count",
215
+ "event": {
216
+ "packageId": "notion",
217
+ "eventId": "page.properties_updated"
218
+ },
219
+ "phase": "emitted",
220
+ "comparison": {
221
+ "operator": "greater_than_or_equal",
222
+ "value": 3
223
+ }
224
+ },
225
+ {
226
+ "id": "comment-created-events",
227
+ "kind": "event.count",
228
+ "event": {
229
+ "packageId": "notion",
230
+ "eventId": "comment.created"
231
+ },
232
+ "phase": "emitted",
233
+ "comparison": {
234
+ "operator": "equals",
235
+ "value": 2
236
+ }
237
+ },
238
+ {
239
+ "id": "triage-order",
240
+ "kind": "operation.order",
241
+ "sequence": [
242
+ {
243
+ "anyOf": [
244
+ {
245
+ "packageId": "notion",
246
+ "operationId": "pages.create"
247
+ }
248
+ ]
249
+ },
250
+ {
251
+ "anyOf": [
252
+ {
253
+ "packageId": "notion",
254
+ "operationId": "pages.update"
255
+ }
256
+ ]
257
+ },
258
+ {
259
+ "anyOf": [
260
+ {
261
+ "packageId": "notion",
262
+ "operationId": "pages.move"
263
+ }
264
+ ]
265
+ },
266
+ {
267
+ "anyOf": [
268
+ {
269
+ "packageId": "notion",
270
+ "operationId": "comments.create"
271
+ }
272
+ ]
273
+ }
274
+ ]
275
+ }
276
+ ]
277
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "notion-trash-and-restore",
4
+ "title": "Trash a page subtree, watch it leave search, restore it, restore the seeded trashed page, reject moves into the trash",
5
+ "targetId": "conformance-agent",
6
+ "scenarioId": "baseline",
7
+ "actorId": "member",
8
+ "task": {
9
+ "instruction": "Run the trash-and-restore conformance flow against the synthetic Notion Tool and fail loudly on any unexpected status, header or body."
10
+ },
11
+ "assertions": [
12
+ {
13
+ "id": "pages-update-ok",
14
+ "kind": "operation.count",
15
+ "operation": {
16
+ "packageId": "notion",
17
+ "operationId": "pages.update"
18
+ },
19
+ "outcomes": [
20
+ "ok"
21
+ ],
22
+ "comparison": {
23
+ "operator": "greater_than_or_equal",
24
+ "value": 3
25
+ }
26
+ },
27
+ {
28
+ "id": "search-ok",
29
+ "kind": "operation.count",
30
+ "operation": {
31
+ "packageId": "notion",
32
+ "operationId": "search"
33
+ },
34
+ "outcomes": [
35
+ "ok"
36
+ ],
37
+ "comparison": {
38
+ "operator": "greater_than_or_equal",
39
+ "value": 3
40
+ }
41
+ },
42
+ {
43
+ "id": "pages-retrieve-ok",
44
+ "kind": "operation.count",
45
+ "operation": {
46
+ "packageId": "notion",
47
+ "operationId": "pages.retrieve"
48
+ },
49
+ "outcomes": [
50
+ "ok"
51
+ ],
52
+ "comparison": {
53
+ "operator": "greater_than_or_equal",
54
+ "value": 2
55
+ }
56
+ },
57
+ {
58
+ "id": "workspace-trash-ok",
59
+ "kind": "operation.count",
60
+ "operation": {
61
+ "packageId": "notion",
62
+ "operationId": "workspace.trash"
63
+ },
64
+ "outcomes": [
65
+ "ok"
66
+ ],
67
+ "comparison": {
68
+ "operator": "greater_than_or_equal",
69
+ "value": 3
70
+ }
71
+ },
72
+ {
73
+ "id": "trash-page-size-rejected",
74
+ "kind": "operation.count",
75
+ "operation": {
76
+ "packageId": "notion",
77
+ "operationId": "workspace.trash"
78
+ },
79
+ "outcomes": [
80
+ "tool_error"
81
+ ],
82
+ "comparison": {
83
+ "operator": "equals",
84
+ "value": 1
85
+ }
86
+ },
87
+ {
88
+ "id": "trashed-edit-rejected",
89
+ "kind": "operation.count",
90
+ "operation": {
91
+ "packageId": "notion",
92
+ "operationId": "pages.update"
93
+ },
94
+ "outcomes": [
95
+ "tool_error"
96
+ ],
97
+ "comparison": {
98
+ "operator": "greater_than_or_equal",
99
+ "value": 1
100
+ }
101
+ },
102
+ {
103
+ "id": "move-into-trash-rejected",
104
+ "kind": "operation.count",
105
+ "operation": {
106
+ "packageId": "notion",
107
+ "operationId": "pages.move"
108
+ },
109
+ "outcomes": [
110
+ "tool_error"
111
+ ],
112
+ "comparison": {
113
+ "operator": "equals",
114
+ "value": 1
115
+ }
116
+ },
117
+ {
118
+ "id": "meeting-notes-restored",
119
+ "kind": "state.value",
120
+ "packageId": "notion",
121
+ "namespace": "pages",
122
+ "rowId": "fd000000-0000-4000-8000-000200000005",
123
+ "path": [
124
+ "in_trash"
125
+ ],
126
+ "comparison": {
127
+ "operator": "equals",
128
+ "value": false
129
+ }
130
+ },
131
+ {
132
+ "id": "weekly-sync-restored",
133
+ "kind": "state.value",
134
+ "packageId": "notion",
135
+ "namespace": "pages",
136
+ "rowId": "fd000000-0000-4000-8000-000200000006",
137
+ "path": [
138
+ "in_trash"
139
+ ],
140
+ "comparison": {
141
+ "operator": "equals",
142
+ "value": false
143
+ }
144
+ },
145
+ {
146
+ "id": "roadmap-restored",
147
+ "kind": "state.value",
148
+ "packageId": "notion",
149
+ "namespace": "pages",
150
+ "rowId": "fd000000-0000-4000-8000-000200000009",
151
+ "path": [
152
+ "in_trash"
153
+ ],
154
+ "comparison": {
155
+ "operator": "equals",
156
+ "value": false
157
+ }
158
+ },
159
+ {
160
+ "id": "page-deleted-events",
161
+ "kind": "event.count",
162
+ "event": {
163
+ "packageId": "notion",
164
+ "eventId": "page.deleted"
165
+ },
166
+ "phase": "emitted",
167
+ "comparison": {
168
+ "operator": "equals",
169
+ "value": 1
170
+ }
171
+ },
172
+ {
173
+ "id": "page-undeleted-events",
174
+ "kind": "event.count",
175
+ "event": {
176
+ "packageId": "notion",
177
+ "eventId": "page.undeleted"
178
+ },
179
+ "phase": "emitted",
180
+ "comparison": {
181
+ "operator": "equals",
182
+ "value": 2
183
+ }
184
+ }
185
+ ]
186
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "notion-update-lost",
4
+ "title": "pages.update commits the change although the caller sees 409 conflict_error",
5
+ "targetId": "conformance-agent",
6
+ "scenarioId": "update-lost",
7
+ "actorId": "member",
8
+ "task": {
9
+ "instruction": "Run the update-lost conformance flow against the synthetic Notion Tool and fail loudly on any unexpected status, header or body."
10
+ },
11
+ "assertions": [
12
+ {
13
+ "id": "pages-update-error",
14
+ "kind": "operation.count",
15
+ "operation": {
16
+ "packageId": "notion",
17
+ "operationId": "pages.update"
18
+ },
19
+ "outcomes": [
20
+ "tool_error"
21
+ ],
22
+ "comparison": {
23
+ "operator": "equals",
24
+ "value": 1
25
+ }
26
+ },
27
+ {
28
+ "id": "pages-update-never-ok",
29
+ "kind": "operation.count",
30
+ "operation": {
31
+ "packageId": "notion",
32
+ "operationId": "pages.update"
33
+ },
34
+ "outcomes": [
35
+ "ok"
36
+ ],
37
+ "comparison": {
38
+ "operator": "equals",
39
+ "value": 0
40
+ }
41
+ },
42
+ {
43
+ "id": "pages-retrieve-ok",
44
+ "kind": "operation.count",
45
+ "operation": {
46
+ "packageId": "notion",
47
+ "operationId": "pages.retrieve"
48
+ },
49
+ "outcomes": [
50
+ "ok"
51
+ ],
52
+ "comparison": {
53
+ "operator": "greater_than_or_equal",
54
+ "value": 1
55
+ }
56
+ },
57
+ {
58
+ "id": "t7-status-committed",
59
+ "kind": "state.value",
60
+ "packageId": "notion",
61
+ "namespace": "pages",
62
+ "rowId": "fd000000-0000-4000-8000-000200000126",
63
+ "path": [
64
+ "properties",
65
+ "Status",
66
+ "value",
67
+ "name"
68
+ ],
69
+ "comparison": {
70
+ "operator": "equals",
71
+ "value": "In progress"
72
+ }
73
+ },
74
+ {
75
+ "id": "page-properties-updated-events",
76
+ "kind": "event.count",
77
+ "event": {
78
+ "packageId": "notion",
79
+ "eventId": "page.properties_updated"
80
+ },
81
+ "phase": "emitted",
82
+ "comparison": {
83
+ "operator": "equals",
84
+ "value": 1
85
+ }
86
+ }
87
+ ]
88
+ }