@nyxa/nyx-agent 0.4.1 → 0.5.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/README.md +52 -9
- package/dist/cli.js +11 -16
- package/dist/commands/init.js +87 -466
- package/dist/commands/run.js +16 -3
- package/dist/config/loadConfig.js +16 -3
- package/dist/config/schema.js +27 -146
- package/dist/runtime/gitLifecycle.js +19 -57
- package/dist/runtime/harness.js +26 -0
- package/dist/runtime/paths.js +0 -12
- package/dist/runtime/prompts.js +103 -0
- package/dist/runtime/runPhase.js +85 -254
- package/dist/runtime/runPipeline.js +395 -0
- package/dist/runtime/schemas.js +52 -0
- package/dist/runtime/scm.js +76 -0
- package/dist/runtime/validateResult.js +1 -3
- package/dist/runtime/workItems.js +42 -118
- package/package.json +2 -5
- package/dist/runtime/buildPrompt.js +0 -54
- package/dist/runtime/effectiveConfig.js +0 -14
- package/dist/runtime/renderTemplate.js +0 -28
- package/dist/runtime/runWorkflow.js +0 -680
- package/dist/runtime/validateWorkItem.js +0 -212
- package/dist/runtime/workItemAnnotations.js +0 -39
- package/docs/nyxagent-v0-spec.md +0 -742
- package/templates/default/prompts/closure.md +0 -30
- package/templates/default/prompts/execution.md +0 -11
- package/templates/default/prompts/finalize.md +0 -7
- package/templates/default/prompts/global-review.md +0 -24
- package/templates/default/prompts/global-revision.md +0 -9
- package/templates/default/prompts/pull-request.md +0 -23
- package/templates/default/prompts/repair-result.md +0 -29
- package/templates/default/prompts/review.md +0 -18
- package/templates/default/prompts/revision.md +0 -7
- package/templates/default/prompts/selection.md +0 -46
- package/templates/default/schemas/closure.schema.json +0 -35
- package/templates/default/schemas/global-review.schema.json +0 -60
- package/templates/default/schemas/pull-request.schema.json +0 -44
- package/templates/default/schemas/review.schema.json +0 -60
- package/templates/default/schemas/selection.schema.json +0 -135
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
Close the selected work item now that its implementation is complete.
|
|
2
|
-
|
|
3
|
-
Before committing or closing anything, inspect the current diff and `git status`.
|
|
4
|
-
If a per-task review ran this iteration (`phase_results.review` in the runtime
|
|
5
|
-
state), it already approved the work — the workflow only routes to closure after an
|
|
6
|
-
approval, so there is no need to re-confirm it. If no review phase ran (the workflow
|
|
7
|
-
may use a global end-of-run review, or no review at all), run a lightweight final
|
|
8
|
-
validation yourself when it is cheap and relevant. A missing review phase is expected
|
|
9
|
-
in those modes and is not a reason to block closure.
|
|
10
|
-
|
|
11
|
-
Commit only the selected work item's changes, using the project's commit message
|
|
12
|
-
conventions.
|
|
13
|
-
|
|
14
|
-
Then close the work item according to its source (see `work_item` in the runtime
|
|
15
|
-
state):
|
|
16
|
-
|
|
17
|
-
- GitHub issue (`work_item.source.type` is `"github"`, locator is `owner/repo#<number>`):
|
|
18
|
-
run `gh issue close <number> --repo <owner/repo>`. Add `--comment "<short note>"`
|
|
19
|
-
when it helps. This step needs network access; the closure phase is configured for it.
|
|
20
|
-
- Local file (`work_item.source.type` is `"local"`): mark it done following the
|
|
21
|
-
project's convention for finished work.
|
|
22
|
-
|
|
23
|
-
Report the outcome in the structured result:
|
|
24
|
-
|
|
25
|
-
- `closed` when the commit succeeded and the issue/work item was actually closed.
|
|
26
|
-
Set `committed` and `issue_closed` to reflect what truly happened.
|
|
27
|
-
- `failed` only when something genuinely blocked closure (e.g. `gh issue close`
|
|
28
|
-
errored, or the diff does not apply). Explain what remains in `summary`. Do not
|
|
29
|
-
report `failed` merely because no review phase ran. Do not pretend the item is
|
|
30
|
-
closed when it is not — a `failed` outcome stops the run so the problem is visible.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
Implement the selected work item.
|
|
2
|
-
|
|
3
|
-
Work only on the selected item from the runtime state. Keep changes focused.
|
|
4
|
-
Use a red-green-refactor loop when practical:
|
|
5
|
-
|
|
6
|
-
1. Reproduce or cover the expected behavior with a focused test.
|
|
7
|
-
2. Implement the smallest coherent change.
|
|
8
|
-
3. Run targeted validation and tidy the result.
|
|
9
|
-
|
|
10
|
-
Do not commit. Do not close or mark the work item done. Leave clear validation
|
|
11
|
-
evidence in your final response.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
The global review approved the run. Finalize without making any further changes.
|
|
2
|
-
|
|
3
|
-
Stay read-only. Do not modify project files; all work is already implemented,
|
|
4
|
-
committed, and closed.
|
|
5
|
-
|
|
6
|
-
Summarize the completed work items (`completed_work_item_keys` and
|
|
7
|
-
`selected_work_item_queue` in the runtime state) and confirm the run is complete.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
Review the entire run (the whole PRD) now that every selected work item has been
|
|
2
|
-
implemented and closed.
|
|
3
|
-
|
|
4
|
-
Stay read-only. Do not modify project files.
|
|
5
|
-
|
|
6
|
-
Assess the work as a whole, focusing on cross-cutting concerns a per-task review
|
|
7
|
-
cannot see:
|
|
8
|
-
|
|
9
|
-
- coherence and integration across all completed work items
|
|
10
|
-
- regressions or conflicts introduced between items
|
|
11
|
-
- overall architecture and design consistency
|
|
12
|
-
- gaps against the original intent of the selected work items
|
|
13
|
-
- security or data-safety concerns spanning the changes
|
|
14
|
-
|
|
15
|
-
Inspect the combined set of changes. When a run branch is configured, review the
|
|
16
|
-
full diff (e.g. `git diff {{git.base}}...HEAD`). The completed items are in
|
|
17
|
-
`completed_work_item_keys` and `selected_work_item_queue` in the runtime state.
|
|
18
|
-
|
|
19
|
-
Return one of these outcomes:
|
|
20
|
-
|
|
21
|
-
- `approved`: the run as a whole is ready to finalize
|
|
22
|
-
- `changes_requested`: include concrete `required_changes` for the correction phase
|
|
23
|
-
|
|
24
|
-
Keep the review concise and actionable.
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
Apply the changes requested by the global review of the whole run.
|
|
2
|
-
|
|
3
|
-
Address the required changes recorded under `phase_results.global_review` in the
|
|
4
|
-
current state. Keep changes focused on exactly what the global review asked for,
|
|
5
|
-
across whichever work items are affected.
|
|
6
|
-
|
|
7
|
-
Commit your corrections using the project's commit message conventions, so they are
|
|
8
|
-
included in the run branch and the pull request. Do not reopen or re-close work
|
|
9
|
-
items; they are already closed by the closure phase.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
Open a single pull request for all the work completed in this run (the PRD).
|
|
2
|
-
|
|
3
|
-
You are on the run branch `{{git.branch}}`, based on `{{git.base}}`. When a worktree is
|
|
4
|
-
configured, your working directory is the isolated worktree. All selected work items are
|
|
5
|
-
already implemented, committed, and their GitHub issues are already closed by the
|
|
6
|
-
closure phase. Your job is only to publish the branch and open the PR.
|
|
7
|
-
|
|
8
|
-
Steps:
|
|
9
|
-
|
|
10
|
-
1. Confirm the branch has commits ahead of the base: `git log --oneline {{git.base}}..HEAD`.
|
|
11
|
-
2. Push the branch: `git push -u origin {{git.branch}}`.
|
|
12
|
-
3. Open the pull request with gh:
|
|
13
|
-
`gh pr create --base {{git.base}} --head {{git.branch}} --title "<concise PRD title>" --body "<summary>"`.
|
|
14
|
-
Derive the title and body from the completed work items in the runtime state
|
|
15
|
-
(`selected_work_item_queue` / `completed_work_item_keys`). Reference the issues that
|
|
16
|
-
were addressed (e.g. "#12, #34") in the body so the PR documents the PRD.
|
|
17
|
-
|
|
18
|
-
This phase needs network access; it is configured for it.
|
|
19
|
-
|
|
20
|
-
Report the outcome in the structured result:
|
|
21
|
-
|
|
22
|
-
- `pr_opened` with `pr_url` set to the created pull request URL.
|
|
23
|
-
- `failed` with `summary` describing what blocked the PR (e.g. push rejected, no remote).
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
The previous phase attempt completed, but NyxAgent could not parse or validate
|
|
2
|
-
its structured result.
|
|
3
|
-
|
|
4
|
-
Validation error:
|
|
5
|
-
|
|
6
|
-
```text
|
|
7
|
-
{{validation_error}}
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
Original phase prompt:
|
|
11
|
-
|
|
12
|
-
```md
|
|
13
|
-
{{original_prompt}}
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Original stdout:
|
|
17
|
-
|
|
18
|
-
```text
|
|
19
|
-
{{original_stdout}}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Original stderr:
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
{{original_stderr}}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Reconstruct the intended structured result from the transcript. Return only the
|
|
29
|
-
final `<nyxagent_result>` block. Do not redo the phase work.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
Review the implementation for the selected work item.
|
|
2
|
-
|
|
3
|
-
Stay read-only. Do not modify project files.
|
|
4
|
-
|
|
5
|
-
Focus on:
|
|
6
|
-
|
|
7
|
-
- alignment with the selected work item
|
|
8
|
-
- correctness and regression risk
|
|
9
|
-
- tests or validation evidence
|
|
10
|
-
- design and architecture fit
|
|
11
|
-
- security or data-safety concerns
|
|
12
|
-
|
|
13
|
-
Return one of these outcomes:
|
|
14
|
-
|
|
15
|
-
- `approved`: the work is ready for closure
|
|
16
|
-
- `changes_requested`: include concrete required changes
|
|
17
|
-
|
|
18
|
-
Keep the review concise and actionable.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
Apply the changes requested by the review for the selected work item.
|
|
2
|
-
|
|
3
|
-
Address the required changes recorded under `phase_results.review` in the current
|
|
4
|
-
state. Keep changes focused on exactly what the review asked for.
|
|
5
|
-
|
|
6
|
-
Do not commit. Do not close or mark the work item done. Leave clear validation
|
|
7
|
-
evidence in your final response.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
Recommend the ordered work item queue for this run.
|
|
2
|
-
|
|
3
|
-
Use `available_work_items` from the runtime contract as the complete inventory
|
|
4
|
-
for selection. Some candidates may be plans, PRDs, or concrete tasks.
|
|
5
|
-
Recommend the most actionable queue for this run, up to
|
|
6
|
-
`workflow.max_iterations` items. NyxAgent will show the complete inventory to
|
|
7
|
-
the user afterward with your recommendation pre-selected.
|
|
8
|
-
|
|
9
|
-
If candidates appear to belong together, use `selection_groups` to describe the
|
|
10
|
-
most useful review grouping. Infer grouping from titles, paths, excerpts, and
|
|
11
|
-
declared relationships when available, but do not assume every project uses
|
|
12
|
-
plan/PRD subdirectories. Groups may include any key from `available_work_items`,
|
|
13
|
-
including items that are not part of your recommended `work_items` queue.
|
|
14
|
-
|
|
15
|
-
When useful, include `work_item_annotations` to label available items for user
|
|
16
|
-
review. Each annotation should include `key` and `kind`. Use `kind` values:
|
|
17
|
-
`task`, `plan`, `prd`, or `work`. Use `work` when you are not sure. You may
|
|
18
|
-
annotate items that are not in the recommended `work_items` queue.
|
|
19
|
-
|
|
20
|
-
Prefer concrete tasks over their parent plan when both are present and the task
|
|
21
|
-
is ready to execute. Choose the plan itself only when it is the best next work.
|
|
22
|
-
If no candidate is exploitable, return `no_work`.
|
|
23
|
-
|
|
24
|
-
Do not choose any key listed in `seen_work_item_keys` or
|
|
25
|
-
`completed_work_item_keys`. Every selected work item must be copied from
|
|
26
|
-
`available_work_items`; do not invent keys.
|
|
27
|
-
|
|
28
|
-
The selected work item identities must match the inventory entries:
|
|
29
|
-
|
|
30
|
-
- local: `source.type` is `local`, `source.locator` is the project-relative
|
|
31
|
-
markdown path, and `key` is `local:<source.locator>`.
|
|
32
|
-
- github: `source.type` is `github`, `source.locator` is
|
|
33
|
-
`owner/repo#number` for the configured repository, and `key` is
|
|
34
|
-
`github:<source.locator>`.
|
|
35
|
-
|
|
36
|
-
Return one of these outcomes:
|
|
37
|
-
|
|
38
|
-
- `selected`: include recommended ordered `work_items`; optionally include
|
|
39
|
-
`selection_groups` with `title`, optional `kind`, and `work_item_keys`; and
|
|
40
|
-
optionally include `work_item_annotations` with `key` and `kind`
|
|
41
|
-
- `no_work`: include a short `reason`
|
|
42
|
-
|
|
43
|
-
For compatibility, `work_item` is still accepted for a single selected item, but
|
|
44
|
-
new results should use `work_items`.
|
|
45
|
-
|
|
46
|
-
Do not modify project files or task files during selection.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"required": ["outcome"],
|
|
5
|
-
"properties": {
|
|
6
|
-
"outcome": {
|
|
7
|
-
"type": "string",
|
|
8
|
-
"enum": ["closed", "failed"]
|
|
9
|
-
},
|
|
10
|
-
"committed": {
|
|
11
|
-
"type": "boolean"
|
|
12
|
-
},
|
|
13
|
-
"issue_closed": {
|
|
14
|
-
"type": "boolean"
|
|
15
|
-
},
|
|
16
|
-
"summary": {
|
|
17
|
-
"type": "string"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"allOf": [
|
|
21
|
-
{
|
|
22
|
-
"if": {
|
|
23
|
-
"properties": {
|
|
24
|
-
"outcome": {
|
|
25
|
-
"const": "failed"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"then": {
|
|
30
|
-
"required": ["summary"]
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
|
-
"additionalProperties": true
|
|
35
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"required": ["outcome", "approved", "summary"],
|
|
5
|
-
"properties": {
|
|
6
|
-
"outcome": {
|
|
7
|
-
"type": "string",
|
|
8
|
-
"enum": ["approved", "changes_requested"]
|
|
9
|
-
},
|
|
10
|
-
"approved": {
|
|
11
|
-
"type": "boolean"
|
|
12
|
-
},
|
|
13
|
-
"summary": {
|
|
14
|
-
"type": "string",
|
|
15
|
-
"minLength": 1
|
|
16
|
-
},
|
|
17
|
-
"required_changes": {
|
|
18
|
-
"type": "array",
|
|
19
|
-
"items": {
|
|
20
|
-
"type": "string"
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"allOf": [
|
|
25
|
-
{
|
|
26
|
-
"if": {
|
|
27
|
-
"properties": {
|
|
28
|
-
"outcome": {
|
|
29
|
-
"const": "approved"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"then": {
|
|
34
|
-
"properties": {
|
|
35
|
-
"approved": {
|
|
36
|
-
"const": true
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"if": {
|
|
43
|
-
"properties": {
|
|
44
|
-
"outcome": {
|
|
45
|
-
"const": "changes_requested"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"then": {
|
|
50
|
-
"properties": {
|
|
51
|
-
"approved": {
|
|
52
|
-
"const": false
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
"required": ["required_changes"]
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
"additionalProperties": true
|
|
60
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"required": ["outcome"],
|
|
5
|
-
"properties": {
|
|
6
|
-
"outcome": {
|
|
7
|
-
"type": "string",
|
|
8
|
-
"enum": ["pr_opened", "failed"]
|
|
9
|
-
},
|
|
10
|
-
"pr_url": {
|
|
11
|
-
"type": "string"
|
|
12
|
-
},
|
|
13
|
-
"summary": {
|
|
14
|
-
"type": "string"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"allOf": [
|
|
18
|
-
{
|
|
19
|
-
"if": {
|
|
20
|
-
"properties": {
|
|
21
|
-
"outcome": {
|
|
22
|
-
"const": "pr_opened"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
"then": {
|
|
27
|
-
"required": ["pr_url"]
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"if": {
|
|
32
|
-
"properties": {
|
|
33
|
-
"outcome": {
|
|
34
|
-
"const": "failed"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
"then": {
|
|
39
|
-
"required": ["summary"]
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"additionalProperties": true
|
|
44
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"required": ["outcome", "approved", "summary"],
|
|
5
|
-
"properties": {
|
|
6
|
-
"outcome": {
|
|
7
|
-
"type": "string",
|
|
8
|
-
"enum": ["approved", "changes_requested"]
|
|
9
|
-
},
|
|
10
|
-
"approved": {
|
|
11
|
-
"type": "boolean"
|
|
12
|
-
},
|
|
13
|
-
"summary": {
|
|
14
|
-
"type": "string",
|
|
15
|
-
"minLength": 1
|
|
16
|
-
},
|
|
17
|
-
"required_changes": {
|
|
18
|
-
"type": "array",
|
|
19
|
-
"items": {
|
|
20
|
-
"type": "string"
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"allOf": [
|
|
25
|
-
{
|
|
26
|
-
"if": {
|
|
27
|
-
"properties": {
|
|
28
|
-
"outcome": {
|
|
29
|
-
"const": "approved"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"then": {
|
|
34
|
-
"properties": {
|
|
35
|
-
"approved": {
|
|
36
|
-
"const": true
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"if": {
|
|
43
|
-
"properties": {
|
|
44
|
-
"outcome": {
|
|
45
|
-
"const": "changes_requested"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"then": {
|
|
50
|
-
"properties": {
|
|
51
|
-
"approved": {
|
|
52
|
-
"const": false
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
"required": ["required_changes"]
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
"additionalProperties": true
|
|
60
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"required": ["outcome"],
|
|
5
|
-
"$defs": {
|
|
6
|
-
"workItem": {
|
|
7
|
-
"type": "object",
|
|
8
|
-
"required": ["key", "title", "source"],
|
|
9
|
-
"properties": {
|
|
10
|
-
"key": {
|
|
11
|
-
"type": "string",
|
|
12
|
-
"minLength": 1
|
|
13
|
-
},
|
|
14
|
-
"title": {
|
|
15
|
-
"type": "string",
|
|
16
|
-
"minLength": 1
|
|
17
|
-
},
|
|
18
|
-
"source": {
|
|
19
|
-
"type": "object",
|
|
20
|
-
"required": ["type", "locator"],
|
|
21
|
-
"properties": {
|
|
22
|
-
"type": {
|
|
23
|
-
"type": "string",
|
|
24
|
-
"enum": ["local", "github"]
|
|
25
|
-
},
|
|
26
|
-
"locator": {
|
|
27
|
-
"type": "string",
|
|
28
|
-
"minLength": 1
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"additionalProperties": true
|
|
32
|
-
},
|
|
33
|
-
"url": {
|
|
34
|
-
"type": "string"
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"additionalProperties": true
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"properties": {
|
|
41
|
-
"outcome": {
|
|
42
|
-
"type": "string",
|
|
43
|
-
"enum": ["selected", "no_work"]
|
|
44
|
-
},
|
|
45
|
-
"work_items": {
|
|
46
|
-
"type": "array",
|
|
47
|
-
"minItems": 1,
|
|
48
|
-
"items": {
|
|
49
|
-
"$ref": "#/$defs/workItem"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"work_item": {
|
|
53
|
-
"$ref": "#/$defs/workItem"
|
|
54
|
-
},
|
|
55
|
-
"selection_groups": {
|
|
56
|
-
"type": "array",
|
|
57
|
-
"items": {
|
|
58
|
-
"type": "object",
|
|
59
|
-
"required": ["title", "work_item_keys"],
|
|
60
|
-
"properties": {
|
|
61
|
-
"title": {
|
|
62
|
-
"type": "string",
|
|
63
|
-
"minLength": 1
|
|
64
|
-
},
|
|
65
|
-
"kind": {
|
|
66
|
-
"type": "string"
|
|
67
|
-
},
|
|
68
|
-
"work_item_keys": {
|
|
69
|
-
"type": "array",
|
|
70
|
-
"minItems": 1,
|
|
71
|
-
"items": {
|
|
72
|
-
"type": "string",
|
|
73
|
-
"minLength": 1
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
"additionalProperties": true
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"work_item_annotations": {
|
|
81
|
-
"type": "array",
|
|
82
|
-
"items": {
|
|
83
|
-
"type": "object",
|
|
84
|
-
"required": ["key"],
|
|
85
|
-
"properties": {
|
|
86
|
-
"key": {
|
|
87
|
-
"type": "string",
|
|
88
|
-
"minLength": 1
|
|
89
|
-
},
|
|
90
|
-
"kind": {
|
|
91
|
-
"type": "string"
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
"additionalProperties": true
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
"reason": {
|
|
98
|
-
"type": "string"
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
"allOf": [
|
|
102
|
-
{
|
|
103
|
-
"if": {
|
|
104
|
-
"properties": {
|
|
105
|
-
"outcome": {
|
|
106
|
-
"const": "selected"
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
"then": {
|
|
111
|
-
"anyOf": [
|
|
112
|
-
{
|
|
113
|
-
"required": ["work_items"]
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"required": ["work_item"]
|
|
117
|
-
}
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
"if": {
|
|
123
|
-
"properties": {
|
|
124
|
-
"outcome": {
|
|
125
|
-
"const": "no_work"
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
"then": {
|
|
130
|
-
"required": ["reason"]
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
],
|
|
134
|
-
"additionalProperties": true
|
|
135
|
-
}
|