@veewo/claw-core 0.2.11 → 0.2.13
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/README.md +16 -16
- package/dist/src/daily-maintenance.d.ts +1 -0
- package/dist/src/daily-maintenance.js +10 -5
- package/dist/src/daily-maintenance.js.map +1 -1
- package/dist/src/embedding-config.d.ts +9 -0
- package/dist/src/embedding-config.js +21 -0
- package/dist/src/embedding-config.js.map +1 -0
- package/dist/src/errors.d.ts +1 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/io.d.ts +11 -0
- package/dist/src/io.js +27 -0
- package/dist/src/io.js.map +1 -1
- package/dist/src/plan.js +36 -1
- package/dist/src/plan.js.map +1 -1
- package/dist/src/project-config-defaults.d.ts +6 -0
- package/dist/src/project-config-defaults.js +5 -0
- package/dist/src/project-config-defaults.js.map +1 -0
- package/dist/src/resources/cindy-delegate-writer/TEMPLATE.json +1 -1
- package/dist/src/resources/delegate-writer/TEMPLATE.json +1 -1
- package/dist/src/resources/doc-updater/FALLBACK.md +16 -0
- package/dist/src/resources/doc-updater/SKILL.md +6 -4
- package/dist/src/resources/doc-updater/TEMPLATE.json +1 -1
- package/dist/src/resources/knowledge-writer/CONTENT-COVERAGE.md +30 -30
- package/dist/src/resources/knowledge-writer/SKILL.md +6 -6
- package/dist/src/resources/knowledge-writer/TEMPLATE.json +1 -1
- package/dist/src/resources/knowledge-writer/knowledge-format.md +95 -47
- package/dist/src/resources/knowledge-writer/non-claw-fallback.md +53 -53
- package/dist/src/templates/plans/default.js +1 -1
- package/dist/src/workflow-guidance.config.json +365 -365
- package/package.json +48 -48
- package/dist/src/workflow-guidance.codex.config.json +0 -363
- package/dist/src/workflow-guidance.qoder.config.json +0 -362
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"goalModeObjective": {
|
|
3
|
-
"withGoal": "Follow the claw workflow guidance and finish your goal: {{planGoal}}",
|
|
4
|
-
"withoutGoal": "Follow the claw workflow guidance and finish your goal."
|
|
5
|
-
},
|
|
6
|
-
"planCreateRecall": {
|
|
7
|
-
"recommendedCommand": "claw search --query \"<topic>\""
|
|
8
|
-
},
|
|
9
|
-
"states": {
|
|
10
|
-
"prepare.requirements.withGoal": {
|
|
11
|
-
"stage": "requirements",
|
|
12
|
-
"summary": "Task scope is bound. Fill the remaining plan fields, then move into execution as soon as requirements are clear. The user has already authorized this @claw-kit thread to use goal mode when the workflow requires it, so permission concerns must not block the flow.",
|
|
13
|
-
"nextsteps": [
|
|
14
|
-
"1. Fill the missing plan fields.",
|
|
15
|
-
"2. Move into `process.active` once requirements are clear."
|
|
16
|
-
],
|
|
17
|
-
"notes": "Fill only the fields still needed to execute, such as `requirements`, `tasks`, `references`, `rules`, and `keyDecisions`. If scope is still unclear, clarify it with the user before switching to `process.active`.",
|
|
18
|
-
"commandHints": [
|
|
19
|
-
"{{editBase}} --status process.active",
|
|
20
|
-
"{{editBase}} --requirements \"<summary>\" --acceptance \"<criterion>\"",
|
|
21
|
-
"{{editBase}} --reference <path> --why \"<reason>\""
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
"prepare.requirements.withGoal.noGoalMode": {
|
|
25
|
-
"stage": "requirements",
|
|
26
|
-
"summary": "Task scope is bound. Fill the remaining plan fields, then move into execution as soon as requirements are clear.",
|
|
27
|
-
"nextsteps": [
|
|
28
|
-
"1. Fill the missing plan fields.",
|
|
29
|
-
"2. Move into `process.active` once requirements are clear."
|
|
30
|
-
],
|
|
31
|
-
"notes": "Fill only the fields still needed to execute, such as `requirements`, `tasks`, `references`, `rules`, and `keyDecisions`. If scope is still unclear, clarify it with the user before switching to `process.active`.",
|
|
32
|
-
"commandHints": [
|
|
33
|
-
"{{editBase}} --status process.active",
|
|
34
|
-
"{{editBase}} --requirements \"<summary>\" --acceptance \"<criterion>\"",
|
|
35
|
-
"{{editBase}} --reference <path> --why \"<reason>\""
|
|
36
|
-
]
|
|
37
|
-
},
|
|
38
|
-
"prepare.requirements.withoutGoal": {
|
|
39
|
-
"stage": "requirements",
|
|
40
|
-
"summary": "Task scope is bound. Add the goal first, then fill the remaining plan fields before execution. The user has already authorized this @claw-kit thread to use goal mode when the workflow requires it, so permission concerns must not block the flow.",
|
|
41
|
-
"nextsteps": [
|
|
42
|
-
"1. Fill `goal.text`.",
|
|
43
|
-
"2. Fill the missing plan fields.",
|
|
44
|
-
"3. Move into `process.active` once requirements are clear."
|
|
45
|
-
],
|
|
46
|
-
"notes": "Fill only the fields still needed to execute, such as `requirements`, `tasks`, `references`, `rules`, and `keyDecisions`. If scope is still unclear, clarify it with the user before switching to `process.active`.",
|
|
47
|
-
"commandHints": [
|
|
48
|
-
"{{editBase}} --status process.active",
|
|
49
|
-
"{{editBase}} --goal \"<goal>\" --requirements \"<summary>\" --acceptance \"<criterion>\"",
|
|
50
|
-
"{{editBase}} --reference <path> --why \"<reason>\""
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
"prepare.requirements.withoutGoal.noGoalMode": {
|
|
54
|
-
"stage": "requirements",
|
|
55
|
-
"summary": "Task scope is bound. Add the goal first, then fill the remaining plan fields before execution.",
|
|
56
|
-
"nextsteps": [
|
|
57
|
-
"1. Fill `goal.text`.",
|
|
58
|
-
"2. Fill the missing plan fields.",
|
|
59
|
-
"3. Move into `process.active` once requirements are clear."
|
|
60
|
-
],
|
|
61
|
-
"notes": "Fill only the fields still needed to execute, such as `requirements`, `tasks`, `references`, `rules`, and `keyDecisions`. If scope is still unclear, clarify it with the user before switching to `process.active`.",
|
|
62
|
-
"commandHints": [
|
|
63
|
-
"{{editBase}} --status process.active",
|
|
64
|
-
"{{editBase}} --goal \"<goal>\" --requirements \"<summary>\" --acceptance \"<criterion>\"",
|
|
65
|
-
"{{editBase}} --reference <path> --why \"<reason>\""
|
|
66
|
-
]
|
|
67
|
-
},
|
|
68
|
-
"prepare.review": {
|
|
69
|
-
"stage": "review",
|
|
70
|
-
"summary": "This plan is in a legacy review stage.",
|
|
71
|
-
"nextsteps": [
|
|
72
|
-
"1. Fold the remaining review notes into the plan.",
|
|
73
|
-
"2. Confirm the route with the user.",
|
|
74
|
-
"3. Move the plan back into `prepare.requirements` or `process.discussing`."
|
|
75
|
-
],
|
|
76
|
-
"notes": "Do not create a separate review pass. Merge review criteria into planning itself.",
|
|
77
|
-
"commandHints": [
|
|
78
|
-
"{{editBase}} --requirements \"<revised summary>\" --key-decision \"<confirmed decision>\"",
|
|
79
|
-
"{{editBase}} --status prepare.requirements",
|
|
80
|
-
"{{editBase}} --status process.discussing"
|
|
81
|
-
],
|
|
82
|
-
"askUser": {
|
|
83
|
-
"reason": "This legacy review stage should be resolved back into normal planning before execution.",
|
|
84
|
-
"options": [
|
|
85
|
-
{
|
|
86
|
-
"id": "merge-revisions",
|
|
87
|
-
"label": "Revise plan",
|
|
88
|
-
"description": "Apply the remaining plan changes directly, then continue with normal planning.",
|
|
89
|
-
"recommended": true
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"id": "discuss-tradeoff",
|
|
93
|
-
"label": "Discuss tradeoff",
|
|
94
|
-
"description": "The review raised a route choice that should be clarified with the user."
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"id": "hold-plan",
|
|
98
|
-
"label": "Hold execution",
|
|
99
|
-
"description": "Pause until missing requirements or constraints are clarified."
|
|
100
|
-
}
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
"process.allTasksDone": {
|
|
105
|
-
"stage": "done",
|
|
106
|
-
"summary": "All plan tasks are done. Finish the plan record, then complete the canonical plan lifecycle.",
|
|
107
|
-
"nextsteps": [
|
|
108
|
-
"1. Clear thread progress with `TodoWrite`.",
|
|
109
|
-
"2. Run `claw plan done --retrospective` once. Add `--key-decision` only for real durable decisions not already recorded.",
|
|
110
|
-
"3. After the canonical plan transition, knowledge finalization is captured for later. When the workflow surfaces a pending knowledge-finalization job, dispatch the knowledge-writer subagent for it and then record it as instructed."
|
|
111
|
-
],
|
|
112
|
-
"notes": "On qoder there is no background finalization worker: knowledge deposition runs in-conversation via subagent dispatch when a pending job is surfaced. It must not change plan completion or subplan resume.",
|
|
113
|
-
"commandHints": [
|
|
114
|
-
"{{doneBase}} --retrospective \"<summary>\" [--key-decision \"<durable decision>\"]"
|
|
115
|
-
]
|
|
116
|
-
},
|
|
117
|
-
"process.hasCompletedTasks": {
|
|
118
|
-
"stage": "{{processStage}}",
|
|
119
|
-
"summary": "Execution is in progress.",
|
|
120
|
-
"nextsteps": [
|
|
121
|
-
"1. Sync thread progress with `TodoWrite`.",
|
|
122
|
-
"2. Continue with {{nextTaskRef}}."
|
|
123
|
-
],
|
|
124
|
-
"notes": "In `process.active`, keep moving unless there is a real blocker or explicit user interruption.",
|
|
125
|
-
"commandHints": [
|
|
126
|
-
"{{taskDoneCommand}}",
|
|
127
|
-
"claw task edit --id <id> --status in_progress"
|
|
128
|
-
]
|
|
129
|
-
},
|
|
130
|
-
"process.justEntered": {
|
|
131
|
-
"stage": "{{processStage}}",
|
|
132
|
-
"summary": "Execution is starting.",
|
|
133
|
-
"nextsteps": [
|
|
134
|
-
"Sync thread progress with `TodoWrite`.",
|
|
135
|
-
"Start with {{nextTaskRef}}."
|
|
136
|
-
],
|
|
137
|
-
"notes": "In `process.active`, keep moving unless there is a real blocker or explicit user interruption.",
|
|
138
|
-
"commandHints": [
|
|
139
|
-
"{{taskDoneCommand}}",
|
|
140
|
-
"{{doneBase}} --retrospective \"<summary>\""
|
|
141
|
-
],
|
|
142
|
-
"goalTool": {
|
|
143
|
-
"tool": "createGoal",
|
|
144
|
-
"allowOverwrite": true,
|
|
145
|
-
"reason": "Execution is entering an active process state, so the thread should have an active thread goal tied to the plan goal."
|
|
146
|
-
},
|
|
147
|
-
"goalMode": {
|
|
148
|
-
"allowOverwrite": true,
|
|
149
|
-
"setWhen": "on_enter_process_active"
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
"process.justEntered.noGoalMode": {
|
|
153
|
-
"stage": "{{processStage}}",
|
|
154
|
-
"summary": "Execution is starting.",
|
|
155
|
-
"nextsteps": [
|
|
156
|
-
"Sync thread progress with `TodoWrite`.",
|
|
157
|
-
"Start with {{nextTaskRef}}."
|
|
158
|
-
],
|
|
159
|
-
"notes": "In `process.active`, keep moving unless there is a real blocker or explicit user interruption.",
|
|
160
|
-
"commandHints": [
|
|
161
|
-
"{{taskDoneCommand}}",
|
|
162
|
-
"{{doneBase}} --retrospective \"<summary>\""
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
"process.resumedActive": {
|
|
166
|
-
"stage": "execution",
|
|
167
|
-
"summary": "Execution is resuming.",
|
|
168
|
-
"nextsteps": [
|
|
169
|
-
"Sync thread progress with `TodoWrite`.",
|
|
170
|
-
"Restore Goal Mode to the active state.",
|
|
171
|
-
"Resume with {{nextTaskRef}}."
|
|
172
|
-
],
|
|
173
|
-
"notes": "The plan is moving back from a paused status into active execution, so Goal Mode should be restored to the active state before work resumes.",
|
|
174
|
-
"commandHints": [
|
|
175
|
-
"{{taskDoneCommand}}",
|
|
176
|
-
"{{doneBase}} --retrospective \"<summary>\""
|
|
177
|
-
],
|
|
178
|
-
"goalTool": {
|
|
179
|
-
"tool": "createGoal",
|
|
180
|
-
"allowOverwrite": true,
|
|
181
|
-
"reason": "Execution is resuming from a paused process state, so the thread should restore an active thread goal for the plan goal."
|
|
182
|
-
},
|
|
183
|
-
"goalMode": {
|
|
184
|
-
"allowOverwrite": true,
|
|
185
|
-
"setWhen": "on_resume_process_active"
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
"process.resumedActive.noGoalMode": {
|
|
189
|
-
"stage": "execution",
|
|
190
|
-
"summary": "Execution is resuming.",
|
|
191
|
-
"nextsteps": [
|
|
192
|
-
"Sync the thread progress with our tasks.",
|
|
193
|
-
"Resume with {{nextTaskRef}}."
|
|
194
|
-
],
|
|
195
|
-
"notes": "The plan is moving back from a paused status into active execution.",
|
|
196
|
-
"commandHints": [
|
|
197
|
-
"{{taskDoneCommand}}",
|
|
198
|
-
"{{doneBase}} --retrospective \"<summary>\""
|
|
199
|
-
]
|
|
200
|
-
},
|
|
201
|
-
"process.wait": {
|
|
202
|
-
"stage": "paused",
|
|
203
|
-
"summary": "Execution is paused.",
|
|
204
|
-
"nextsteps": [
|
|
205
|
-
"1. Use `updateGoal(status=\"blocked\")` to end the current active thread goal.",
|
|
206
|
-
"2. When resuming the plan, restore the active thread goal after re-entering `process.active`.",
|
|
207
|
-
"3. Resume through `process.active` when execution should continue."
|
|
208
|
-
],
|
|
209
|
-
"notes": "Use `process.wait` for a real blocker or a deliberate hold. Do not keep executing while the plan is paused.",
|
|
210
|
-
"commandHints": [
|
|
211
|
-
"{{resumeBase}}"
|
|
212
|
-
],
|
|
213
|
-
"goalTool": {
|
|
214
|
-
"tool": "updateGoal",
|
|
215
|
-
"status": "blocked",
|
|
216
|
-
"reason": "Execution is paused in `process.wait`, so the current active thread goal should be ended as blocked until work resumes."
|
|
217
|
-
}
|
|
218
|
-
},
|
|
219
|
-
"process.wait.noGoalMode": {
|
|
220
|
-
"stage": "paused",
|
|
221
|
-
"summary": "Execution is paused.",
|
|
222
|
-
"nextsteps": [
|
|
223
|
-
"1. Resume through `process.active` when execution should continue."
|
|
224
|
-
],
|
|
225
|
-
"notes": "Use `process.wait` for a real blocker or a deliberate hold. Do not keep executing while the plan is paused.",
|
|
226
|
-
"commandHints": [
|
|
227
|
-
"{{resumeBase}}"
|
|
228
|
-
]
|
|
229
|
-
},
|
|
230
|
-
"process.discussing": {
|
|
231
|
-
"stage": "discussion",
|
|
232
|
-
"summary": "The plan is paused for discussion.",
|
|
233
|
-
"nextsteps": [
|
|
234
|
-
"1. Use `updateGoal(status=\"blocked\")` to end the current active thread goal.",
|
|
235
|
-
"2. When resuming the plan, restore the active thread goal after re-entering `process.active`.",
|
|
236
|
-
"3. Resolve the discussion, then resume through `process.active`."
|
|
237
|
-
],
|
|
238
|
-
"notes": "Use `process.discussing` for route discussion or decision-making. Resume execution only after the discussion is settled.",
|
|
239
|
-
"commandHints": [
|
|
240
|
-
"{{resumeBase}}"
|
|
241
|
-
],
|
|
242
|
-
"goalTool": {
|
|
243
|
-
"tool": "updateGoal",
|
|
244
|
-
"status": "blocked",
|
|
245
|
-
"reason": "Execution is paused in `process.discussing`, so the current active thread goal should be ended as blocked until the route is settled."
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
"process.discussing.initial": {
|
|
249
|
-
"stage": "discussion",
|
|
250
|
-
"summary": "The plan starts in discussion while the requirements and proposed solution are discussed and confirmed with the user.",
|
|
251
|
-
"nextsteps": [
|
|
252
|
-
"1. Use {{planningSkill}} to discuss and confirm the requirements and proposed solution with the user.",
|
|
253
|
-
"2. If execution remains, record the task list with the relevant command hint. If planning resolves the request, complete task #1 and close the plan."
|
|
254
|
-
],
|
|
255
|
-
"notes": "A draft is not completion.",
|
|
256
|
-
"commandHints": [
|
|
257
|
-
"{{startBase}} --requirements \"<summary>\" --acceptance \"<criterion>\" --add-task \"<title>\" --detail \"<detail>\"",
|
|
258
|
-
"claw task done --id 1"
|
|
259
|
-
]
|
|
260
|
-
},
|
|
261
|
-
"process.discussing.initial.noPlanStart": {
|
|
262
|
-
"stage": "discussion",
|
|
263
|
-
"summary": "The plan starts in discussion and must remain there until the current template task's delivery guidance is satisfied.",
|
|
264
|
-
"nextsteps": [
|
|
265
|
-
"1. Use the task's requested planning or discussion skill until its outcome, constraints, and material open questions are clear.",
|
|
266
|
-
"2. Follow the current template task's delivery guidance; use ordinary plan and task mutations unless that guidance deliberately adopts the optional plan start shorthand."
|
|
267
|
-
],
|
|
268
|
-
"notes": "claw plan start remains globally available as optional syntax sugar, but this template task has not selected it as the recommended delivery path."
|
|
269
|
-
},
|
|
270
|
-
"process.discussing.noGoalMode": {
|
|
271
|
-
"stage": "discussion",
|
|
272
|
-
"summary": "The plan is paused for discussion.",
|
|
273
|
-
"nextsteps": [
|
|
274
|
-
"1. Resolve the discussion, then resume through `process.active`."
|
|
275
|
-
],
|
|
276
|
-
"notes": "Use `process.discussing` for route discussion or decision-making. Resume execution only after the discussion is settled.",
|
|
277
|
-
"commandHints": [
|
|
278
|
-
"{{resumeBase}}"
|
|
279
|
-
]
|
|
280
|
-
},
|
|
281
|
-
"process.activeTask": {
|
|
282
|
-
"stage": "{{processStage}}",
|
|
283
|
-
"summary": "Execution is in progress.",
|
|
284
|
-
"nextsteps": [
|
|
285
|
-
"Continue the current task."
|
|
286
|
-
],
|
|
287
|
-
"commandHints": [
|
|
288
|
-
"{{taskDoneCommand}}"
|
|
289
|
-
]
|
|
290
|
-
},
|
|
291
|
-
"process.default": {
|
|
292
|
-
"stage": "{{processStage}}",
|
|
293
|
-
"summary": "Execution is in progress.",
|
|
294
|
-
"nextsteps": [
|
|
295
|
-
"Continue with {{nextTaskRef}}."
|
|
296
|
-
],
|
|
297
|
-
"commandHints": [
|
|
298
|
-
"{{taskDoneCommand}}"
|
|
299
|
-
]
|
|
300
|
-
},
|
|
301
|
-
"end.completed": {
|
|
302
|
-
"stage": "done",
|
|
303
|
-
"summary": "The plan is completed and ready for closeout.",
|
|
304
|
-
"nextsteps": [
|
|
305
|
-
"1. Use `updateGoal(status=\"complete\")` to close the active thread goal for this plan.",
|
|
306
|
-
"2. Finish any remaining workflow-guided closeout work such as archive or parent-plan resumption.",
|
|
307
|
-
"3. Do not continue ad hoc in this thread. Start the next task only through `using-claw-kit`, then follow the returned `workflowGuidance`."
|
|
308
|
-
],
|
|
309
|
-
"goalTool": {
|
|
310
|
-
"tool": "updateGoal",
|
|
311
|
-
"status": "complete",
|
|
312
|
-
"reason": "The plan has reached completion, so the active thread goal should be marked complete."
|
|
313
|
-
}
|
|
314
|
-
},
|
|
315
|
-
"end.closed": {
|
|
316
|
-
"stage": "paused",
|
|
317
|
-
"summary": "The plan is no longer active.",
|
|
318
|
-
"nextsteps": [
|
|
319
|
-
"Reopen through `prepare.requirements` before resuming, or leave it as historical context."
|
|
320
|
-
],
|
|
321
|
-
"commandHints": [
|
|
322
|
-
"{{editBase}} --status prepare.requirements"
|
|
323
|
-
]
|
|
324
|
-
}
|
|
325
|
-
},
|
|
326
|
-
"sessionStart": {
|
|
327
|
-
"default": {
|
|
328
|
-
"lines": [
|
|
329
|
-
"This session started inside a .claw project: {{projectName}} ({{projectId}}).",
|
|
330
|
-
".claw directory: {{clawDir}}",
|
|
331
|
-
"You can use goal mode in this thread when required by the claw workflow; don't ask me again.",
|
|
332
|
-
"Follow the claw workflowGuidance return fields as the required next-step contract.",
|
|
333
|
-
"Load claw-kit:using-claw-kit as the main workflow skill for this session."
|
|
334
|
-
]
|
|
335
|
-
},
|
|
336
|
-
"recovered": {
|
|
337
|
-
"header": [
|
|
338
|
-
"Use @claw-kit for this session.",
|
|
339
|
-
"Claw workflow snapshot is recovered.",
|
|
340
|
-
"Treat returned claw workflowGuidance as the only next-step contract.",
|
|
341
|
-
"There is already an unfinished plan in this thread.",
|
|
342
|
-
"Tell the user and ask whether to close the current plan or continue advancing it before starting unrelated work.",
|
|
343
|
-
"You can use goal mode in this thread when required by the claw workflow; don't ask me again.",
|
|
344
|
-
"After this plan finishes, keep using claw-kit in this thread for the next task.",
|
|
345
|
-
""
|
|
346
|
-
],
|
|
347
|
-
"snapshotHeader": "Current claw workflow snapshot:",
|
|
348
|
-
"snapshotFields": {
|
|
349
|
-
"task": "- task: {{taskName}}",
|
|
350
|
-
"plan": "- plan: {{planFile}}",
|
|
351
|
-
"planStatus": "- plan status: {{planStatus}}",
|
|
352
|
-
"planSummary": "- plan summary: {{planSummary}}",
|
|
353
|
-
"nextSteps": "- next steps: {{nextSteps}}",
|
|
354
|
-
"commandHints": "- command hints: {{commandHints}}",
|
|
355
|
-
"notes": "- notes: {{notes}}",
|
|
356
|
-
"askUser": "- ask user: {{askUser}}",
|
|
357
|
-
"goalMode": "- goal mode: {{goalMode}}"
|
|
358
|
-
},
|
|
359
|
-
"planContentHeader": "Current plan content:"
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|