@codetreker/daynight 0.6.2 → 0.8.5
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/api/client.d.ts +1 -0
- package/dist/api/client.js +17 -0
- package/dist/api/client.js.map +1 -1
- package/dist/cli/cancellation.d.ts +5 -0
- package/dist/cli/cancellation.js +24 -0
- package/dist/cli/cancellation.js.map +1 -0
- package/dist/cli/commands.js +4 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/context.d.ts +2 -0
- package/dist/cli/context.js +2 -0
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/prompts.d.ts +22 -0
- package/dist/cli/prompts.js +83 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/commands/completion/command.js +14 -6
- package/dist/commands/completion/command.js.map +1 -1
- package/dist/commands/completion/definition.js +18 -4
- package/dist/commands/completion/definition.js.map +1 -1
- package/dist/commands/completion/setup.d.ts +21 -0
- package/dist/commands/completion/setup.js +210 -0
- package/dist/commands/completion/setup.js.map +1 -0
- package/dist/commands/project/command.js +23 -2
- package/dist/commands/project/command.js.map +1 -1
- package/dist/commands/project/definition.js +3 -3
- package/dist/commands/project/definition.js.map +1 -1
- package/dist/commands/review/adapters/copilot.js +3 -3
- package/dist/commands/review/adapters/copilot.js.map +1 -1
- package/dist/commands/review/command.js +3 -2
- package/dist/commands/review/command.js.map +1 -1
- package/dist/commands/review/config.js +10 -3
- package/dist/commands/review/config.js.map +1 -1
- package/dist/commands/review/repositories.d.ts +2 -0
- package/dist/commands/review/repositories.js +2 -2
- package/dist/commands/review/repositories.js.map +1 -1
- package/dist/commands/review/skill.js +5 -83
- package/dist/commands/review/skill.js.map +1 -1
- package/dist/commands/review/skills/daynight-review/SKILL.md +43 -14
- package/dist/commands/server/runtime.js +19 -3
- package/dist/commands/server/runtime.js.map +1 -1
- package/dist/commands/setup/command.d.ts +2 -0
- package/dist/commands/setup/command.js +21 -0
- package/dist/commands/setup/command.js.map +1 -0
- package/dist/commands/setup/definition.d.ts +2 -0
- package/dist/commands/setup/definition.js +12 -0
- package/dist/commands/setup/definition.js.map +1 -0
- package/dist/commands/skill/agents.d.ts +23 -0
- package/dist/commands/skill/agents.js +14 -0
- package/dist/commands/skill/agents.js.map +1 -0
- package/dist/commands/skill/command.d.ts +12 -0
- package/dist/commands/skill/command.js +76 -0
- package/dist/commands/skill/command.js.map +1 -0
- package/dist/commands/skill/definition.d.ts +2 -0
- package/dist/commands/skill/definition.js +12 -0
- package/dist/commands/skill/definition.js.map +1 -0
- package/dist/commands/skill/install.d.ts +12 -0
- package/dist/commands/skill/install.js +118 -0
- package/dist/commands/skill/install.js.map +1 -0
- package/dist/commands/skill/skills/daynight/SKILL.md +95 -0
- package/dist/commands/skill/skills/daynight/references/commands.md +155 -0
- package/dist/commands/skill/targets.d.ts +10 -0
- package/dist/commands/skill/targets.js +29 -0
- package/dist/commands/skill/targets.js.map +1 -0
- package/dist/commands/task/command.js +9 -0
- package/dist/commands/task/command.js.map +1 -1
- package/dist/commands/task/definition.js +6 -0
- package/dist/commands/task/definition.js.map +1 -1
- package/dist/config/errors.d.ts +9 -0
- package/dist/config/errors.js +24 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/files.d.ts +1 -1
- package/dist/config/files.js +36 -2
- package/dist/config/files.js.map +1 -1
- package/dist/config/server.js +2 -1
- package/dist/config/server.js.map +1 -1
- package/dist/config/setup.d.ts +10 -0
- package/dist/config/setup.js +123 -0
- package/dist/config/setup.js.map +1 -0
- package/dist/platform/skill-bundle.d.ts +10 -0
- package/dist/platform/skill-bundle.js +82 -0
- package/dist/platform/skill-bundle.js.map +1 -0
- package/dist/repository/git.d.ts +1 -0
- package/dist/repository/git.js +6 -3
- package/dist/repository/git.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Daynight commands
|
|
2
|
+
|
|
3
|
+
Use the installed `daynight` CLI. Run `daynight <group> <command> --help` when the
|
|
4
|
+
installed version's usage is needed. Query results are service facts; do not use
|
|
5
|
+
private API calls or manually edit `.daynight/project.yml`.
|
|
6
|
+
|
|
7
|
+
## Project discovery and reads
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
daynight task ready --json
|
|
11
|
+
daynight task ready --limit 20 --json
|
|
12
|
+
daynight task show <task-id> --json
|
|
13
|
+
daynight task list --status in_progress --json
|
|
14
|
+
daynight task graph --json
|
|
15
|
+
daynight task list --ready --json
|
|
16
|
+
daynight project list --json
|
|
17
|
+
daynight project show <project-id> --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Without `--project`, task commands resolve the current worktree's Git origin and
|
|
21
|
+
verify its binding against the configured service. A unique discovery may write
|
|
22
|
+
the ignored binding and update the root `.gitignore`. A missing binding is not a
|
|
23
|
+
reason to skip discovery, including in a fresh linked worktree. No match,
|
|
24
|
+
ambiguous matches, invalid binding, missing configuration, and network failure
|
|
25
|
+
are different outcomes: report the actual diagnostic. Do not automatically
|
|
26
|
+
create a project or change an existing association. The CLI's setup guidance
|
|
27
|
+
owns service configuration.
|
|
28
|
+
|
|
29
|
+
All task commands accept `--project <project-id>` for an explicitly established
|
|
30
|
+
target; it applies to that invocation and bypasses repository binding discovery.
|
|
31
|
+
Do not silently substitute a remembered project ID after discovery fails. Use
|
|
32
|
+
project list/show to inspect candidates when an explicit selection is needed.
|
|
33
|
+
|
|
34
|
+
`task ready` returns the first N ready tasks in `createdAt`, then ID ascending
|
|
35
|
+
order. `--limit` defaults to 10 and accepts decimal integers in 1–100. It requests
|
|
36
|
+
one task page without following its cursor and returns a full-task array of at
|
|
37
|
+
most N elements. It accepts `--project` and `--json`, with no status or cursor
|
|
38
|
+
option. A result with N tasks can have more candidates beyond it. An empty array
|
|
39
|
+
means no ready work was found, not that the project has no tasks. `ready` means
|
|
40
|
+
`todo` with every direct dependency done; it provides no ownership or priority.
|
|
41
|
+
|
|
42
|
+
Use ready for routine work selection and show for the selected task or a known
|
|
43
|
+
task being resumed. When its identity is unknown, query in-progress work as
|
|
44
|
+
needed. `task list`, including `task list --ready`, reads every page and returns
|
|
45
|
+
a complete array; reserve it for a complete inventory. List filters combine
|
|
46
|
+
with AND. Task counts are bounded by ready, but full titles/descriptions and
|
|
47
|
+
project discovery can still produce substantial output or additional requests.
|
|
48
|
+
|
|
49
|
+
Use the graph when an overall dependency view is needed. It is one complete
|
|
50
|
+
snapshot containing project metadata, summary, task IDs, title previews, status,
|
|
51
|
+
readiness, and dependency/blocking IDs. It omits full descriptions and versions.
|
|
52
|
+
`graph_limit_exceeded` reports the service's 1,000-node / 5,000-edge bound; no
|
|
53
|
+
partial graph is returned. Continue with bounded ready and selected task reads.
|
|
54
|
+
Other graph failures retain their own cause.
|
|
55
|
+
|
|
56
|
+
## Create and update
|
|
57
|
+
|
|
58
|
+
In these examples, replace IDs with observed UUIDs and `observed-version` with
|
|
59
|
+
the exact decimal version from the task details used to decide the update.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
daynight task create --title "Deliver sign-in" --description "Scope, acceptance, and handoff context"
|
|
63
|
+
daynight task create --title "Deliver the sign-in page" --depends-on <task-id>
|
|
64
|
+
daynight task update <task-id> --status in_progress --if-version <observed-version>
|
|
65
|
+
daynight task update <task-id> --description "Complete revised task description" --if-version <observed-version>
|
|
66
|
+
daynight task update <task-id> --depends-on <task-a> --depends-on <task-b> --if-version <observed-version>
|
|
67
|
+
daynight task update <task-id> --clear-dependencies --if-version <observed-version>
|
|
68
|
+
daynight task update <task-id> --description= --if-version <observed-version>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Create starts in `todo`. Create and update do **not** accept `--json`; their
|
|
72
|
+
success output contains the confirmed resource, including its ID and version.
|
|
73
|
+
Read it before planning the next mutation. Only ready, list, show, and graph task
|
|
74
|
+
queries accept `--json`.
|
|
75
|
+
|
|
76
|
+
An update must change at least one of title, description, status, or dependencies.
|
|
77
|
+
Omitted fields remain unchanged. A provided description replaces the entire
|
|
78
|
+
description; `--description=` or `--description ""` clears it. Repeated
|
|
79
|
+
`--depends-on` supplies the **complete** replacement set, not additions; retain
|
|
80
|
+
each still-required dependency. Values are individual UUIDs, not CSV. Use
|
|
81
|
+
`--clear-dependencies` to empty the set; it conflicts with `--depends-on`.
|
|
82
|
+
Text options accept `--option=value`; use that form when a value starts with a
|
|
83
|
+
dash. Preserve server validation errors rather than silently altering inputs.
|
|
84
|
+
|
|
85
|
+
## Preserve the version read with the task
|
|
86
|
+
|
|
87
|
+
Every update based on task content must use that read's `--if-version`. Omitting
|
|
88
|
+
it makes the CLI read a newer version immediately before submission, which does
|
|
89
|
+
not protect a decision based on older content. Read once, decide from those
|
|
90
|
+
details, and submit that version. After another mutation, obtain or use the
|
|
91
|
+
confirmed resulting resource before deciding the next update.
|
|
92
|
+
|
|
93
|
+
Versions are JSON numbers in `1..9223372036854775807`. Preserve the original
|
|
94
|
+
decimal digits; ordinary JavaScript numeric decoding can round them. Copy the
|
|
95
|
+
raw decimal token or use a lossless JSON decoder. Node.js 24 can retain the raw
|
|
96
|
+
token through the reviver's `context.source`, for example:
|
|
97
|
+
|
|
98
|
+
```js
|
|
99
|
+
const task = JSON.parse(rawTaskJson, (key, value, context) =>
|
|
100
|
+
key === "version" && typeof value === "number" ? context.source : value,
|
|
101
|
+
);
|
|
102
|
+
const observedVersion = task.version; // Decimal string for --if-version.
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
On `version_conflict`, show the task again, understand the concurrent change,
|
|
106
|
+
and reconsider the proposed fields against the new facts. Do not merely replace
|
|
107
|
+
the version and replay the old update. A dependency refusal likewise needs its
|
|
108
|
+
reported prerequisite, cross-project reference, or cycle addressed within the
|
|
109
|
+
authorized scope. Setting `in_progress` never atomically claims the task.
|
|
110
|
+
|
|
111
|
+
## Unconfirmed writes and failures
|
|
112
|
+
|
|
113
|
+
The CLI does not retry failed writes automatically. Preserve error codes,
|
|
114
|
+
request IDs, task IDs, and actual service diagnostics. A confirmed service
|
|
115
|
+
refusal is a failed operation. A lost response, timeout, cancellation, or other
|
|
116
|
+
unconfirmed result may have left a write applied: do not report success or
|
|
117
|
+
blindly resend it.
|
|
118
|
+
|
|
119
|
+
For an unconfirmed update, show the known task and compare its complete current
|
|
120
|
+
fields with the intended change. If the intended state is present, report the
|
|
121
|
+
observed state without claiming proof of which writer produced it. If it is
|
|
122
|
+
absent or has changed, reconcile the facts and decide what remains necessary;
|
|
123
|
+
any later update needs the exact version read for that decision.
|
|
124
|
+
|
|
125
|
+
For an unconfirmed create, list tasks in the established project and inspect
|
|
126
|
+
plausible matches with show. Match the intended title, full description,
|
|
127
|
+
dependencies, and operation context; title alone is not a unique identity. A
|
|
128
|
+
unique matching candidate must have its identity established before treating it
|
|
129
|
+
as the created task. With zero candidates, multiple candidates, or unresolved
|
|
130
|
+
identity, keep the create unconfirmed and explain the minimum needed
|
|
131
|
+
reconciliation. Do not create again merely because a read returned no match.
|
|
132
|
+
|
|
133
|
+
## Completion and dependencies
|
|
134
|
+
|
|
135
|
+
For development and PR-delivered design/documentation tasks, inspect the hosting
|
|
136
|
+
platform for every necessary delivery PR. Each must be confirmed merged and all
|
|
137
|
+
acceptance criteria satisfied before this update is valid:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
daynight task update <task-id> --status done --description "Complete task description, acceptance evidence, PR URLs, and merge commit references" --if-version <observed-version>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Use a fresh task read for this decision. Keep the complete relevant description
|
|
144
|
+
when adding delivery references. If a PR remains open, even with passing CI and
|
|
145
|
+
approved review, retain `in_progress` and record the PR plus remaining checks or
|
|
146
|
+
waiting items. If merge visibility is unavailable, keep completion unconfirmed
|
|
147
|
+
and retain `in_progress`. Use the repository host's native client or API to
|
|
148
|
+
verify merge facts; do not assume a particular hosting service. Do not merge
|
|
149
|
+
without the applicable authorization. Nondevelopment tasks with no PR delivery
|
|
150
|
+
path use their explicit acceptance criteria.
|
|
151
|
+
|
|
152
|
+
After the service confirms `done`, query `daynight task ready --json` to inspect
|
|
153
|
+
newly available successors. Query the graph when overall dependency context is
|
|
154
|
+
needed. Pending or unconfirmed completion must not be presented as having
|
|
155
|
+
unblocked a dependent task.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SkillAgent } from "./agents.js";
|
|
2
|
+
export type SkillScope = "user" | "project";
|
|
3
|
+
export type SkillTarget = {
|
|
4
|
+
path: string;
|
|
5
|
+
parent: string;
|
|
6
|
+
ancestor: string;
|
|
7
|
+
missingParents: readonly string[];
|
|
8
|
+
agents: SkillAgent[];
|
|
9
|
+
};
|
|
10
|
+
export declare const planSkillTargets: (base: string, agents: readonly SkillAgent[]) => Promise<SkillTarget[]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { resolvePhysicalDirectory } from "../../platform/filesystem.js";
|
|
3
|
+
const comparisonPath = (value) => process.platform === "win32" ? value.toLowerCase() : value;
|
|
4
|
+
const contains = (parent, child) => {
|
|
5
|
+
const relative = path.relative(comparisonPath(parent), comparisonPath(child));
|
|
6
|
+
return relative !== "" && relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
|
|
7
|
+
};
|
|
8
|
+
export const planSkillTargets = async (base, agents) => {
|
|
9
|
+
const targets = [];
|
|
10
|
+
for (const agent of agents) {
|
|
11
|
+
const parent = await resolvePhysicalDirectory(path.join(base, agent.directory, "skills"));
|
|
12
|
+
const physicalParent = path.join(parent.ancestorPath, ...parent.missingComponents);
|
|
13
|
+
const targetPath = path.join(physicalParent, "daynight");
|
|
14
|
+
const existing = targets.find((target) => comparisonPath(target.path) === comparisonPath(targetPath));
|
|
15
|
+
if (existing !== undefined)
|
|
16
|
+
existing.agents.push(agent);
|
|
17
|
+
else
|
|
18
|
+
targets.push({ path: targetPath, parent: physicalParent, ancestor: parent.ancestorPath, missingParents: parent.missingComponents, agents: [agent] });
|
|
19
|
+
}
|
|
20
|
+
for (const [index, first] of targets.entries()) {
|
|
21
|
+
for (const second of targets.slice(index + 1)) {
|
|
22
|
+
if (contains(first.path, second.path) || contains(second.path, first.path)) {
|
|
23
|
+
throw new Error(`Cannot install overlapping skill targets: ${first.agents.map(({ name }) => name).join(", ")} at ${first.path}; ${second.agents.map(({ name }) => name).join(", ")} at ${second.path}. Change the parent skill-directory links so neither target contains the other.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return targets;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../../src/commands/skill/targets.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAYxE,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7G,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,KAAa,EAAW,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAAE,MAA6B,EAA0B,EAAE;IAC5G,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QACtG,IAAI,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACnD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5J,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,iFAAiF,CAAC,CAAC;YACzR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -18,6 +18,10 @@ export const runTaskCommand = async (args, context, dependencies = defaultDepend
|
|
|
18
18
|
const status = command.options.get("--status");
|
|
19
19
|
const dependsOn = command.options.get("--depends-on");
|
|
20
20
|
const clearDependencies = command.options.has("--clear-dependencies");
|
|
21
|
+
const limitArgument = command.options.get("--limit");
|
|
22
|
+
const readyLimit = limitArgument === undefined ? 10 : Number(limitArgument);
|
|
23
|
+
if (limitArgument !== undefined && (!/^[0-9]+$/.test(limitArgument) || !Number.isInteger(readyLimit) || readyLimit < 1 || readyLimit > 100))
|
|
24
|
+
throw new UsageError("Ready task limit must be a decimal integer from 1 to 100.", help);
|
|
21
25
|
if (title !== undefined && !isNonemptyText(title))
|
|
22
26
|
throw new UsageError("Task title must be nonempty UTF-8 text without NUL characters.", help);
|
|
23
27
|
if (description !== undefined && !isText(description))
|
|
@@ -86,6 +90,11 @@ export const runTaskCommand = async (args, context, dependencies = defaultDepend
|
|
|
86
90
|
operation.check();
|
|
87
91
|
return command.options.has("--json") ? renderTaskJson(tasks) : renderTaskList(tasks);
|
|
88
92
|
}
|
|
93
|
+
if (command.command.name === "ready") {
|
|
94
|
+
const tasks = await api.listReadyTasks(project.id, readyLimit);
|
|
95
|
+
operation.check();
|
|
96
|
+
return command.options.has("--json") ? renderTaskJson(tasks) : tasks.length === 0 ? "No ready tasks.\n" : renderTaskList(tasks);
|
|
97
|
+
}
|
|
89
98
|
if (command.command.name === "graph") {
|
|
90
99
|
const graph = await api.getTaskGraph(project.id);
|
|
91
100
|
operation.check();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/task/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOjD,MAAM,mBAAmB,GAA4B;IACnD,gBAAgB,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IACrG,cAAc,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CACvG,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,IAAuB,EACvB,OAAmB,EACnB,YAAY,GAA4B,mBAAmB,EAC5C,EAAE;IACjB,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC;IACjG,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAuB,CAAC;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAuB,CAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAA2B,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAkC,CAAC;IACvF,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,gEAAgE,EAAE,IAAI,CAAC,CAAC;IAChJ,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,6DAA6D,EAAE,IAAI,CAAC,CAAC;IACjJ,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,iDAAiD,EAAE,IAAI,CAAC,CAAC;IAC7J,IAAI,SAAS,KAAK,SAAS,IAAI,iBAAiB;QAAE,MAAM,IAAI,UAAU,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC;IACxI,MAAM,OAAO,GAAqC;QAChD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3C,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,0EAA0E,EAAE,IAAI,CAAC,CAAC;IACnL,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;IAC5E,IAAI,SAA6B,CAAC;IAClC,IAAI,MAA0B,CAAC;IAC/B,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC3D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;YACnD,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,IAAI,UAAU,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,SAAS,CAAC;YACtD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAuB,CAAC;IAClF,IAAI,eAAmC,CAAC;IACxC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACnE,IAAI,CAAC;YAAC,eAAe,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAAC,CAAC;QAChE,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;IACvG,CAAC;IACD,MAAM,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACnF,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,OAAgB,CAAC;QACrB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC3H,CAAC;QACD,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvG,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,KAAK,GAAoB,EAAE,KAAK,EAAE,KAAM,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAC3J,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACrD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,kBAAkB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,OAAO,GAAgB,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACzI,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACvD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAO,CAAC,CAAC;YACpD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACnH,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,MAAO,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,kBAAkB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/task/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,12 @@ export const taskDefinition = {
|
|
|
22
22
|
options: [statusOption, { names: ["--ready"], description: "Include only tasks ready to start" }, projectOption, jsonOption, helpOption],
|
|
23
23
|
details: "Combine --status and --ready with AND. Read every page before printing the complete result.",
|
|
24
24
|
},
|
|
25
|
+
{
|
|
26
|
+
name: "ready",
|
|
27
|
+
description: "Show the first ready tasks in the project",
|
|
28
|
+
options: [{ names: ["--limit"], description: "Maximum number of tasks to return, from 1 to 100 (default: 10)", value: { name: "count", kind: "text" } }, projectOption, jsonOption, helpOption],
|
|
29
|
+
details: "Read one bounded page ordered by creation time, then task UUID, ascending. A task is ready when it is todo and every dependency is done.",
|
|
30
|
+
},
|
|
25
31
|
{
|
|
26
32
|
name: "show",
|
|
27
33
|
description: "Show a task by its ID",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/task/definition.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAkB,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7G,MAAM,aAAa,GAAkB,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;AACrK,MAAM,UAAU,GAAkB,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;AACrH,MAAM,WAAW,GAAkB,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;AAC7H,MAAM,iBAAiB,GAAkB,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,4CAA4C,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;AACjM,MAAM,gBAAgB,GAAkB,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3M,MAAM,YAAY,GAAkB,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAC3K,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,kEAAkE;IAC/E,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,CAAC;YAC7G,OAAO,EAAE,6FAA6F;SACvG;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,wCAAwC;YACrD,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;YACxI,OAAO,EAAE,6FAA6F;SACvG;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;SACjD;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gDAAgD;YAC7D,SAAS,EAAE,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB;gBACtE,EAAE,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBACrF,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,gEAAgE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;gBACpJ,aAAa,EAAE,UAAU,CAAC;YAC5B,OAAO,EAAE,8NAA8N;SACxO;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;SACjD;KACF;IACD,OAAO,EAAE,CAAC,UAAU,CAAC;IACrB,OAAO,EAAE,6RAA6R;CACvS,CAAC"}
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/task/definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class MissingConfigurationFileError extends Error {
|
|
2
|
+
readonly configFile: string;
|
|
3
|
+
constructor(configFile: string, cause: unknown);
|
|
4
|
+
}
|
|
5
|
+
export declare class MissingConfigurationFieldError extends Error {
|
|
6
|
+
readonly field: "serverUrl" | "repositories";
|
|
7
|
+
constructor(field: "serverUrl" | "repositories", message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare const isMissingConfiguration: (error: unknown, field: MissingConfigurationFieldError["field"]) => boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class MissingConfigurationFileError extends Error {
|
|
2
|
+
configFile;
|
|
3
|
+
constructor(configFile, cause) {
|
|
4
|
+
super(`Cannot read configuration file ${configFile}.`, { cause });
|
|
5
|
+
this.configFile = configFile;
|
|
6
|
+
this.name = "MissingConfigurationFileError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class MissingConfigurationFieldError extends Error {
|
|
10
|
+
field;
|
|
11
|
+
constructor(field, message) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.field = field;
|
|
14
|
+
this.name = "MissingConfigurationFieldError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const isMissingConfiguration = (error, field) => {
|
|
18
|
+
if (error instanceof MissingConfigurationFileError)
|
|
19
|
+
return true;
|
|
20
|
+
if (error instanceof MissingConfigurationFieldError)
|
|
21
|
+
return error.field === field;
|
|
22
|
+
return error instanceof Error && error.cause !== undefined && isMissingConfiguration(error.cause, field);
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACjC,UAAU;IAA/B,YAAqB,UAAkB,EAAE,KAAc;QACrD,KAAK,CAAC,kCAAkC,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;0BAD/C,UAAU;QAE7B,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAClC,KAAK;IAA1B,YAAqB,KAAmC,EAAE,OAAe;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;qBADI,KAAK;QAExB,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAE,KAA8C,EAAW,EAAE;IAChH,IAAI,KAAK,YAAY,6BAA6B;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,KAAK,YAAY,8BAA8B;QAAE,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;IAClF,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3G,CAAC,CAAC"}
|
package/dist/config/files.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export type ConfigurationUpdate<Result> = {
|
|
|
4
4
|
result: Result;
|
|
5
5
|
source?: string;
|
|
6
6
|
};
|
|
7
|
-
export declare const updateConfigurationFile: <Result>(paths: ConfigurationPaths, update: (source: string | undefined) => Promise<ConfigurationUpdate<Result
|
|
7
|
+
export declare const updateConfigurationFile: <Result>(paths: ConfigurationPaths, update: (source: string | undefined) => Promise<ConfigurationUpdate<Result>>, signal?: AbortSignal) => Promise<Result>;
|
package/dist/config/files.js
CHANGED
|
@@ -1,16 +1,49 @@
|
|
|
1
|
-
import { lstat, mkdir, open, readFile, unlink } from "node:fs/promises";
|
|
1
|
+
import { lstat, mkdir, open, readFile, stat, unlink } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { replaceFileAtomically } from "../platform/files.js";
|
|
4
|
+
import { MissingConfigurationFileError } from "./errors.js";
|
|
4
5
|
const hasCode = (error, code) => error instanceof Error && "code" in error && error.code === code;
|
|
6
|
+
const isMissingFile = async (file) => {
|
|
7
|
+
const absolute = path.resolve(file);
|
|
8
|
+
const root = path.parse(absolute).root;
|
|
9
|
+
let current = root;
|
|
10
|
+
for (const component of absolute.slice(root.length).split(path.sep)) {
|
|
11
|
+
current = path.join(current, component);
|
|
12
|
+
let entry;
|
|
13
|
+
try {
|
|
14
|
+
entry = await lstat(current);
|
|
15
|
+
}
|
|
16
|
+
catch (cause) {
|
|
17
|
+
if (hasCode(cause, "ENOENT"))
|
|
18
|
+
return true;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (entry.isSymbolicLink()) {
|
|
22
|
+
try {
|
|
23
|
+
entry = await stat(current);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (current !== absolute && !entry.isDirectory())
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
5
34
|
export const readConfigurationSource = async (paths, signal) => {
|
|
6
35
|
try {
|
|
7
36
|
return await readFile(paths.configFile, { encoding: "utf8", ...(signal === undefined ? {} : { signal }) });
|
|
8
37
|
}
|
|
9
38
|
catch (cause) {
|
|
39
|
+
if (hasCode(cause, "ENOENT") && await isMissingFile(paths.configFile)) {
|
|
40
|
+
throw new MissingConfigurationFileError(paths.configFile, cause);
|
|
41
|
+
}
|
|
10
42
|
throw new Error(`Cannot read configuration file ${paths.configFile}.`, { cause });
|
|
11
43
|
}
|
|
12
44
|
};
|
|
13
|
-
export const updateConfigurationFile = async (paths, update) => {
|
|
45
|
+
export const updateConfigurationFile = async (paths, update, signal) => {
|
|
46
|
+
signal?.throwIfAborted();
|
|
14
47
|
await mkdir(path.dirname(paths.configFile), { recursive: true });
|
|
15
48
|
const lockFile = `${paths.configFile}.lock`;
|
|
16
49
|
let lock;
|
|
@@ -38,6 +71,7 @@ export const updateConfigurationFile = async (paths, update) => {
|
|
|
38
71
|
}
|
|
39
72
|
const source = existingEntry === undefined ? undefined : await readConfigurationSource(paths);
|
|
40
73
|
const updated = await update(source);
|
|
74
|
+
signal?.throwIfAborted();
|
|
41
75
|
if (updated.source !== undefined) {
|
|
42
76
|
await replaceFileAtomically(paths.configFile, updated.source, existingEntry?.mode);
|
|
43
77
|
}
|
package/dist/config/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/config/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/config/files.ts"],"names":[],"mappings":"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"}
|
package/dist/config/server.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseConfigurationDocument } from "./document.js";
|
|
2
2
|
import { readConfigurationSource } from "./files.js";
|
|
3
|
+
import { MissingConfigurationFieldError } from "./errors.js";
|
|
3
4
|
export const normalizeServerUrl = (value) => {
|
|
4
5
|
const invalid = () => new Error("serverUrl must be an HTTP(S) origin without credentials, a non-root path, query, fragment, whitespace, or backslashes.");
|
|
5
6
|
if (typeof value !== "string" || !/^https?:\/\//i.test(value) || /[\s\u0000-\u001f\u007f-\u009f\\?#]/u.test(value)) {
|
|
@@ -22,7 +23,7 @@ export const parseServerConfiguration = (source, paths) => {
|
|
|
22
23
|
try {
|
|
23
24
|
const { mapping } = parseConfigurationDocument(source, paths);
|
|
24
25
|
if (!Object.hasOwn(mapping, "serverUrl")) {
|
|
25
|
-
throw new
|
|
26
|
+
throw new MissingConfigurationFieldError("serverUrl", "serverUrl is not configured; use daynight setup --server-url <url> to set the daynight-server HTTP(S) origin.");
|
|
26
27
|
}
|
|
27
28
|
return { serverUrl: normalizeServerUrl(mapping.serverUrl) };
|
|
28
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/config/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/config/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC3D,MAAM,OAAO,GAAG,GAAU,EAAE,CAAC,IAAI,KAAK,CAAC,wHAAwH,CAAC,CAAC;IACjK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC3P,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAuB,EAAE;IACzG,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,8BAA8B,CAAC,WAAW,EAAE,+GAA+G,CAAC,CAAC;QACzK,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1I,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,KAAyB,EAAE,MAAoB,EAAgC,EAAE,CAC7H,wBAAwB,CAAC,MAAM,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CliContext } from "../cli/context.js";
|
|
2
|
+
import type { AddRepositoryInput } from "../commands/review/repositories.js";
|
|
3
|
+
export type SetupInput = {
|
|
4
|
+
serverUrl?: string;
|
|
5
|
+
reviewRepository?: AddRepositoryInput;
|
|
6
|
+
};
|
|
7
|
+
type Capability = "server" | "review";
|
|
8
|
+
export declare const configure: (context: CliContext, input?: SetupInput, capability?: Capability, suppliedSignal?: AbortSignal) => Promise<void>;
|
|
9
|
+
export declare const guideMissingConfiguration: <Result>(context: CliContext, capability: Capability, load: () => Promise<Result>, signal?: AbortSignal) => Promise<Result>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Document } from "yaml";
|
|
2
|
+
import { CliCancelledError, withCliCancellation } from "../cli/cancellation.js";
|
|
3
|
+
import { parseConfigurationDocument } from "./document.js";
|
|
4
|
+
import { MissingConfigurationFileError, isMissingConfiguration } from "./errors.js";
|
|
5
|
+
import { readConfigurationSource, updateConfigurationFile } from "./files.js";
|
|
6
|
+
import { resolveConfigurationPaths } from "./paths.js";
|
|
7
|
+
import { normalizeServerUrl } from "./server.js";
|
|
8
|
+
const optionalSource = async (context, signal) => {
|
|
9
|
+
try {
|
|
10
|
+
return await readConfigurationSource(resolveConfigurationPaths(context.homeDirectory()), signal);
|
|
11
|
+
}
|
|
12
|
+
catch (cause) {
|
|
13
|
+
if (cause instanceof MissingConfigurationFileError)
|
|
14
|
+
return undefined;
|
|
15
|
+
throw cause;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const configure = async (context, input, capability, suppliedSignal) => withCliCancellation(context, async (signal) => {
|
|
19
|
+
const paths = resolveConfigurationPaths(context.homeDirectory());
|
|
20
|
+
const source = await optionalSource(context, signal);
|
|
21
|
+
const baseline = source === undefined ? {} : parseConfigurationDocument(source, paths).mapping;
|
|
22
|
+
const ask = async (question) => {
|
|
23
|
+
if (context.prompt?.isInteractive !== true)
|
|
24
|
+
throw new Error("Interactive setup requires terminal input and stderr. Use daynight setup --server-url <url> or daynight setup --review-repo <remote>.");
|
|
25
|
+
signal.throwIfAborted();
|
|
26
|
+
const answer = await context.prompt.ask(question, signal);
|
|
27
|
+
signal.throwIfAborted();
|
|
28
|
+
return answer;
|
|
29
|
+
};
|
|
30
|
+
const retry = async (question, validate) => {
|
|
31
|
+
for (;;) {
|
|
32
|
+
const answer = await ask(question);
|
|
33
|
+
try {
|
|
34
|
+
return await validate(answer);
|
|
35
|
+
}
|
|
36
|
+
catch (cause) {
|
|
37
|
+
signal.throwIfAborted();
|
|
38
|
+
if (cause instanceof CliCancelledError)
|
|
39
|
+
throw cause;
|
|
40
|
+
context.stderr(`${cause instanceof Error ? cause.message : String(cause)}\n`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
try {
|
|
45
|
+
let server = input?.serverUrl !== undefined || capability === "server";
|
|
46
|
+
let review = input?.reviewRepository !== undefined || capability === "review";
|
|
47
|
+
if (input === undefined && capability === undefined) {
|
|
48
|
+
const selected = await retry("Configure (server/review/both): ", (answer) => {
|
|
49
|
+
if (!["server", "review", "both"].includes(answer))
|
|
50
|
+
throw new Error("Choose server, review, or both.");
|
|
51
|
+
return answer;
|
|
52
|
+
});
|
|
53
|
+
server = selected !== "review";
|
|
54
|
+
review = selected !== "server";
|
|
55
|
+
}
|
|
56
|
+
let serverUrl = input?.serverUrl;
|
|
57
|
+
if (server && serverUrl === undefined)
|
|
58
|
+
serverUrl = await retry("Server URL (for example http://127.0.0.1:8787): ", normalizeServerUrl);
|
|
59
|
+
if (serverUrl !== undefined)
|
|
60
|
+
serverUrl = normalizeServerUrl(serverUrl);
|
|
61
|
+
let reviewRepository = input?.reviewRepository;
|
|
62
|
+
let reviewTools;
|
|
63
|
+
let reviewPaths;
|
|
64
|
+
let reviewOptions;
|
|
65
|
+
if (review) {
|
|
66
|
+
const { validateRegistrationConfigurationSource, remoteIdentity } = await import("../commands/review/config.js");
|
|
67
|
+
reviewTools = await import("../commands/review/repositories.js");
|
|
68
|
+
reviewPaths = (await import("../commands/review/paths.js")).resolveReviewPaths(context.homeDirectory());
|
|
69
|
+
reviewOptions = { homeDirectory: context.homeDirectory(), workingDirectory: context.workingDirectory() };
|
|
70
|
+
if (source !== undefined)
|
|
71
|
+
await validateRegistrationConfigurationSource(source, reviewPaths);
|
|
72
|
+
if (reviewRepository === undefined) {
|
|
73
|
+
const remote = await retry("Review repository (HTTPS or SSH GitHub address): ", (answer) => { remoteIdentity(answer, "remote"); return answer; });
|
|
74
|
+
reviewRepository = await retry("Review clone path (blank for configured default): ", async (answer) => {
|
|
75
|
+
const candidate = answer === "" ? { remote } : { remote, path: answer };
|
|
76
|
+
await reviewTools.updateRepositoryConfiguration(source, candidate, reviewPaths, reviewOptions);
|
|
77
|
+
return candidate;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
await reviewTools.updateRepositoryConfiguration(source, reviewRepository, reviewPaths, reviewOptions);
|
|
81
|
+
}
|
|
82
|
+
const selectedFields = [...(server ? ["serverUrl"] : []), ...(review ? ["repositoryRoot", "repositories"] : [])];
|
|
83
|
+
const fingerprint = (mapping) => JSON.stringify(selectedFields.map((field) => [field, Object.hasOwn(mapping, field), mapping[field]]));
|
|
84
|
+
signal.throwIfAborted();
|
|
85
|
+
await updateConfigurationFile(paths, async (currentSource) => {
|
|
86
|
+
const current = currentSource === undefined ? undefined : parseConfigurationDocument(currentSource, paths);
|
|
87
|
+
if (fingerprint(current?.mapping ?? {}) !== fingerprint(baseline))
|
|
88
|
+
throw new Error("Configuration changed during setup. Run setup again to review the current values.");
|
|
89
|
+
const document = current?.document ?? new Document({});
|
|
90
|
+
if (serverUrl !== undefined)
|
|
91
|
+
document.set("serverUrl", serverUrl);
|
|
92
|
+
let updatedSource = document.toString();
|
|
93
|
+
if (reviewRepository !== undefined) {
|
|
94
|
+
const result = await reviewTools.updateRepositoryConfiguration(updatedSource, reviewRepository, reviewPaths, reviewOptions);
|
|
95
|
+
if (result.source !== undefined)
|
|
96
|
+
updatedSource = result.source;
|
|
97
|
+
}
|
|
98
|
+
return { result: undefined, source: updatedSource };
|
|
99
|
+
}, signal);
|
|
100
|
+
context.stderr(`Configuration saved to ${paths.configFile}.\n`);
|
|
101
|
+
}
|
|
102
|
+
catch (cause) {
|
|
103
|
+
if (signal.aborted)
|
|
104
|
+
throw new CliCancelledError("Setup cancelled.", { cause: signal.reason });
|
|
105
|
+
throw cause;
|
|
106
|
+
}
|
|
107
|
+
}, suppliedSignal, () => new CliCancelledError("Setup cancelled."));
|
|
108
|
+
export const guideMissingConfiguration = async (context, capability, load, signal) => {
|
|
109
|
+
try {
|
|
110
|
+
return await load();
|
|
111
|
+
}
|
|
112
|
+
catch (cause) {
|
|
113
|
+
if (!isMissingConfiguration(cause, capability === "server" ? "serverUrl" : "repositories"))
|
|
114
|
+
throw cause;
|
|
115
|
+
if (context.prompt?.isInteractive !== true) {
|
|
116
|
+
const command = capability === "server" ? "daynight setup --server-url <url>" : "daynight setup --review-repo <remote>";
|
|
117
|
+
throw new Error(`${cause instanceof Error ? cause.message : String(cause)} Run ${command} to configure it.`, { cause: cause instanceof MissingConfigurationFileError ? cause.cause : cause });
|
|
118
|
+
}
|
|
119
|
+
await configure(context, undefined, capability, signal);
|
|
120
|
+
return load();
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/config/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type BundleEntry = {
|
|
2
|
+
relativePath: string;
|
|
3
|
+
type: "directory";
|
|
4
|
+
} | {
|
|
5
|
+
relativePath: string;
|
|
6
|
+
type: "file";
|
|
7
|
+
contents: Buffer;
|
|
8
|
+
};
|
|
9
|
+
export declare const captureSkillBundle: (directory: string, label: string) => Promise<BundleEntry[]>;
|
|
10
|
+
export declare const validateSkillEntrypoint: (entries: readonly BundleEntry[], skillName: string, label: string) => void;
|