@codetreker/daynight 0.3.0 → 0.6.2

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 (133) hide show
  1. package/dist/api/client.d.ts +43 -0
  2. package/dist/api/client.js +285 -0
  3. package/dist/api/client.js.map +1 -0
  4. package/dist/api/index.d.ts +7 -0
  5. package/dist/api/index.js +5 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/json.d.ts +3 -0
  8. package/dist/api/json.js +25 -0
  9. package/dist/api/json.js.map +1 -0
  10. package/dist/api/operation.d.ts +23 -0
  11. package/dist/api/operation.js +78 -0
  12. package/dist/api/operation.js.map +1 -0
  13. package/dist/api/parse.d.ts +12 -0
  14. package/dist/api/parse.js +160 -0
  15. package/dist/api/parse.js.map +1 -0
  16. package/dist/api/types.d.ts +75 -0
  17. package/dist/api/types.js +2 -0
  18. package/dist/api/types.js.map +1 -0
  19. package/dist/cli/application.js +10 -20
  20. package/dist/cli/application.js.map +1 -1
  21. package/dist/cli/commands.d.ts +3 -3
  22. package/dist/cli/commands.js +29 -4
  23. package/dist/cli/commands.js.map +1 -1
  24. package/dist/cli/schema.d.ts +53 -0
  25. package/dist/cli/schema.js +113 -0
  26. package/dist/cli/schema.js.map +1 -0
  27. package/dist/commands/completion/bash.d.ts +2 -0
  28. package/dist/commands/completion/bash.js +279 -0
  29. package/dist/commands/completion/bash.js.map +1 -0
  30. package/dist/commands/completion/command.d.ts +2 -0
  31. package/dist/commands/completion/command.js +20 -0
  32. package/dist/commands/completion/command.js.map +1 -0
  33. package/dist/commands/completion/definition.d.ts +2 -0
  34. package/dist/commands/completion/definition.js +8 -0
  35. package/dist/commands/completion/definition.js.map +1 -0
  36. package/dist/commands/completion/zsh.d.ts +2 -0
  37. package/dist/commands/completion/zsh.js +165 -0
  38. package/dist/commands/completion/zsh.js.map +1 -0
  39. package/dist/commands/project/command.d.ts +6 -0
  40. package/dist/commands/project/command.js +39 -0
  41. package/dist/commands/project/command.js.map +1 -0
  42. package/dist/commands/project/definition.d.ts +2 -0
  43. package/dist/commands/project/definition.js +35 -0
  44. package/dist/commands/project/definition.js.map +1 -0
  45. package/dist/commands/project/rendering.d.ts +4 -0
  46. package/dist/commands/project/rendering.js +17 -0
  47. package/dist/commands/project/rendering.js.map +1 -0
  48. package/dist/commands/review/adapters/copilot.d.ts +16 -9
  49. package/dist/commands/review/adapters/copilot.js +196 -99
  50. package/dist/commands/review/adapters/copilot.js.map +1 -1
  51. package/dist/commands/review/command.js +16 -98
  52. package/dist/commands/review/command.js.map +1 -1
  53. package/dist/commands/review/config.d.ts +1 -2
  54. package/dist/commands/review/config.js +24 -43
  55. package/dist/commands/review/config.js.map +1 -1
  56. package/dist/commands/review/coordinator.d.ts +2 -2
  57. package/dist/commands/review/coordinator.js +5 -1
  58. package/dist/commands/review/coordinator.js.map +1 -1
  59. package/dist/commands/review/definition.d.ts +2 -0
  60. package/dist/commands/review/definition.js +33 -0
  61. package/dist/commands/review/definition.js.map +1 -0
  62. package/dist/commands/review/listing.js +2 -8
  63. package/dist/commands/review/listing.js.map +1 -1
  64. package/dist/commands/review/paths.d.ts +2 -3
  65. package/dist/commands/review/paths.js +4 -6
  66. package/dist/commands/review/paths.js.map +1 -1
  67. package/dist/commands/review/processes.d.ts +2 -2
  68. package/dist/commands/review/repositories.js +13 -102
  69. package/dist/commands/review/repositories.js.map +1 -1
  70. package/dist/commands/review/runtime.d.ts +4 -1
  71. package/dist/commands/review/runtime.js +7 -4
  72. package/dist/commands/review/runtime.js.map +1 -1
  73. package/dist/commands/review/skill.d.ts +11 -0
  74. package/dist/commands/review/skill.js +242 -0
  75. package/dist/commands/review/skill.js.map +1 -0
  76. package/dist/commands/review/skills/daynight-review/SKILL.md +63 -0
  77. package/dist/commands/review/store.d.ts +4 -0
  78. package/dist/commands/review/store.js +8 -0
  79. package/dist/commands/review/store.js.map +1 -1
  80. package/dist/commands/server/runtime.d.ts +16 -0
  81. package/dist/commands/server/runtime.js +52 -0
  82. package/dist/commands/server/runtime.js.map +1 -0
  83. package/dist/commands/task/command.d.ts +8 -0
  84. package/dist/commands/task/command.js +106 -0
  85. package/dist/commands/task/command.js.map +1 -0
  86. package/dist/commands/task/definition.d.ts +2 -0
  87. package/dist/commands/task/definition.js +50 -0
  88. package/dist/commands/task/definition.js.map +1 -0
  89. package/dist/commands/task/rendering.d.ts +5 -0
  90. package/dist/commands/task/rendering.js +49 -0
  91. package/dist/commands/task/rendering.js.map +1 -0
  92. package/dist/commands/update/command.js +5 -15
  93. package/dist/commands/update/command.js.map +1 -1
  94. package/dist/commands/update/definition.d.ts +2 -0
  95. package/dist/commands/update/definition.js +7 -0
  96. package/dist/commands/update/definition.js.map +1 -0
  97. package/dist/config/document.d.ts +9 -0
  98. package/dist/config/document.js +45 -0
  99. package/dist/config/document.js.map +1 -0
  100. package/dist/config/files.d.ts +7 -0
  101. package/dist/config/files.js +69 -0
  102. package/dist/config/files.js.map +1 -0
  103. package/dist/config/paths.d.ts +6 -0
  104. package/dist/config/paths.js +9 -0
  105. package/dist/config/paths.js.map +1 -0
  106. package/dist/config/server.d.ts +7 -0
  107. package/dist/config/server.js +34 -0
  108. package/dist/config/server.js.map +1 -0
  109. package/dist/platform/files.d.ts +1 -0
  110. package/dist/platform/files.js +48 -0
  111. package/dist/platform/files.js.map +1 -0
  112. package/dist/platform/terminal.d.ts +1 -0
  113. package/dist/platform/terminal.js +10 -0
  114. package/dist/platform/terminal.js.map +1 -0
  115. package/dist/platform/text.d.ts +2 -0
  116. package/dist/platform/text.js +3 -0
  117. package/dist/platform/text.js.map +1 -0
  118. package/dist/repository/binding.d.ts +21 -0
  119. package/dist/repository/binding.js +242 -0
  120. package/dist/repository/binding.js.map +1 -0
  121. package/dist/repository/context.d.ts +10 -0
  122. package/dist/repository/context.js +32 -0
  123. package/dist/repository/context.js.map +1 -0
  124. package/dist/repository/git.d.ts +20 -0
  125. package/dist/repository/git.js +213 -0
  126. package/dist/repository/git.js.map +1 -0
  127. package/dist/repository/identity.d.ts +5 -0
  128. package/dist/repository/identity.js +154 -0
  129. package/dist/repository/identity.js.map +1 -0
  130. package/dist/repository/index.d.ts +4 -0
  131. package/dist/repository/index.js +3 -0
  132. package/dist/repository/index.js.map +1 -0
  133. package/package.json +5 -4
@@ -0,0 +1,160 @@
1
+ import { isNonemptyText, isText } from "../platform/text.js";
2
+ export class ProtocolError extends Error {
3
+ constructor(message = "The server returned an invalid response.") { super(message); this.name = "ProtocolError"; }
4
+ }
5
+ const malformed = () => { throw new ProtocolError(); };
6
+ const record = (value) => {
7
+ if (typeof value !== "object" || value === null || Array.isArray(value))
8
+ return malformed();
9
+ return value;
10
+ };
11
+ const text = (value, nonempty = false) => {
12
+ if (!isText(value) || (nonempty && !isNonemptyText(value)))
13
+ return malformed();
14
+ return value;
15
+ };
16
+ const bool = (value) => typeof value === "boolean" ? value : malformed();
17
+ const count = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : malformed();
18
+ export const canonicalId = (value) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value) ? value.toLowerCase() : null;
19
+ const id = (value) => {
20
+ const parsed = text(value);
21
+ if (canonicalId(parsed) !== parsed)
22
+ return malformed();
23
+ return parsed;
24
+ };
25
+ const timestamp = (value) => {
26
+ const parsed = text(value);
27
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?Z$/.test(parsed))
28
+ return malformed();
29
+ const milliseconds = Date.parse(parsed);
30
+ if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString().slice(0, 19) !== parsed.slice(0, 19))
31
+ return malformed();
32
+ return parsed;
33
+ };
34
+ const array = (value, parse) => Array.isArray(value) ? value.map(parse) : malformed();
35
+ const ids = (value) => {
36
+ const parsed = array(value, id);
37
+ if (new Set(parsed).size !== parsed.length)
38
+ return malformed();
39
+ return parsed;
40
+ };
41
+ const status = (value) => value === "todo" || value === "in_progress" || value === "done" ? value : malformed();
42
+ export const parseProject = (value, expectedId) => {
43
+ const data = record(value);
44
+ const parsed = { id: id(data.id), name: text(data.name, true), repoUrl: text(data.repoUrl, true), createdAt: timestamp(data.createdAt), updatedAt: timestamp(data.updatedAt) };
45
+ if (expectedId !== undefined && parsed.id !== expectedId)
46
+ return malformed();
47
+ return parsed;
48
+ };
49
+ const dependencyState = (data) => {
50
+ const parsed = { id: id(data.id), status: status(data.status), dependsOn: ids(data.dependsOn), blockedBy: ids(data.blockedBy), ready: bool(data.ready), createdAt: timestamp(data.createdAt), updatedAt: timestamp(data.updatedAt) };
51
+ if (parsed.dependsOn.includes(parsed.id) || parsed.blockedBy.some((item) => !parsed.dependsOn.includes(item)) || parsed.ready !== (parsed.status === "todo" && parsed.blockedBy.length === 0))
52
+ return malformed();
53
+ return parsed;
54
+ };
55
+ export const parseTask = (value, projectId, taskId) => {
56
+ const data = record(value);
57
+ const version = data.version;
58
+ if (typeof version !== "bigint" || version < 1n || version > 9223372036854775807n)
59
+ return malformed();
60
+ const parsed = { ...dependencyState(data), projectId: id(data.projectId), title: text(data.title, true), description: text(data.description), version };
61
+ if (parsed.projectId !== projectId || (taskId !== undefined && parsed.id !== taskId))
62
+ return malformed();
63
+ return parsed;
64
+ };
65
+ export const parsePage = (value, parse) => {
66
+ const data = record(value);
67
+ const items = array(data.items, parse);
68
+ if (items.length > 100 || new Set(items.map((item) => item.id)).size !== items.length)
69
+ return malformed();
70
+ let nextCursor = null;
71
+ if (data.nextCursor !== null) {
72
+ nextCursor = text(data.nextCursor, true);
73
+ if (items.length === 0)
74
+ return malformed();
75
+ }
76
+ return { items, nextCursor };
77
+ };
78
+ const graphTask = (value) => {
79
+ const data = record(value);
80
+ const parsed = { ...dependencyState(data), titlePreview: text(data.titlePreview), titleTruncated: bool(data.titleTruncated) };
81
+ const characters = Array.from(parsed.titlePreview).length;
82
+ if (characters === 0 || characters > 160 || (parsed.titleTruncated && characters !== 160))
83
+ return malformed();
84
+ return parsed;
85
+ };
86
+ const summary = (value) => {
87
+ const data = record(value);
88
+ return { total: count(data.total), todo: count(data.todo), inProgress: count(data.inProgress), done: count(data.done), ready: count(data.ready), blocked: count(data.blocked) };
89
+ };
90
+ export const parseTaskGraph = (value, projectId) => {
91
+ const data = record(value);
92
+ const parsed = { project: parseProject(data.project, projectId), summary: summary(data.summary), tasks: array(data.tasks, graphTask) };
93
+ const byId = new Map(parsed.tasks.map((task) => [task.id, task]));
94
+ if (parsed.tasks.length > 1000 || byId.size !== parsed.tasks.length || parsed.tasks.reduce((sum, task) => sum + task.dependsOn.length, 0) > 5000)
95
+ return malformed();
96
+ const expected = { total: parsed.tasks.length, todo: 0, inProgress: 0, done: 0, ready: 0, blocked: 0 };
97
+ for (const task of parsed.tasks) {
98
+ if (task.status === "todo") {
99
+ expected.todo++;
100
+ if (task.ready)
101
+ expected.ready++;
102
+ else
103
+ expected.blocked++;
104
+ }
105
+ else if (task.status === "in_progress")
106
+ expected.inProgress++;
107
+ else
108
+ expected.done++;
109
+ const blocked = task.dependsOn.filter((dependency) => {
110
+ const target = byId.get(dependency);
111
+ if (target === undefined)
112
+ return malformed();
113
+ return target.status !== "done";
114
+ });
115
+ if (blocked.length !== task.blockedBy.length || blocked.some((dependency) => !task.blockedBy.includes(dependency)))
116
+ return malformed();
117
+ }
118
+ for (const key of Object.keys(expected))
119
+ if (expected[key] !== parsed.summary[key])
120
+ return malformed();
121
+ const visited = new Set();
122
+ const active = new Set();
123
+ const visit = (taskId) => {
124
+ if (active.has(taskId))
125
+ return malformed();
126
+ if (visited.has(taskId))
127
+ return;
128
+ active.add(taskId);
129
+ for (const dependency of byId.get(taskId).dependsOn)
130
+ visit(dependency);
131
+ active.delete(taskId);
132
+ visited.add(taskId);
133
+ };
134
+ for (const task of parsed.tasks)
135
+ visit(task.id);
136
+ return parsed;
137
+ };
138
+ export const parseServerError = (value) => {
139
+ const data = record(record(value).error);
140
+ const code = text(data.code, true);
141
+ const requestId = text(data.requestId, true);
142
+ const message = text(data.message, true);
143
+ if (!/^[a-z][a-z0-9_]{0,63}$/.test(code) || !/^[a-z0-9][a-z0-9._-]{0,63}$/i.test(requestId))
144
+ return malformed();
145
+ let details;
146
+ if (data.details !== undefined) {
147
+ const raw = record(data.details);
148
+ details = {
149
+ ...(raw.taskIds === undefined ? {} : { taskIds: ids(raw.taskIds) }),
150
+ ...(raw.nodeCount === undefined ? {} : { nodeCount: count(raw.nodeCount) }),
151
+ ...(raw.edgeCount === undefined ? {} : { edgeCount: count(raw.edgeCount) }),
152
+ ...(raw.maxNodes === undefined ? {} : { maxNodes: count(raw.maxNodes) }),
153
+ ...(raw.maxEdges === undefined ? {} : { maxEdges: count(raw.maxEdges) }),
154
+ };
155
+ }
156
+ if (code === "graph_limit_exceeded" && (details?.nodeCount === undefined || details.edgeCount === undefined || details.maxNodes !== 1000 || details.maxEdges !== 5000 || (details.nodeCount <= details.maxNodes && details.edgeCount <= details.maxEdges)))
157
+ return malformed();
158
+ return { code, message, requestId, ...(details === undefined ? {} : { details }) };
159
+ };
160
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/api/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ export type TaskStatus = "todo" | "in_progress" | "done";
2
+ export type Project = {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ readonly repoUrl: string;
6
+ readonly createdAt: string;
7
+ readonly updatedAt: string;
8
+ };
9
+ export type Task = {
10
+ readonly id: string;
11
+ readonly projectId: string;
12
+ readonly title: string;
13
+ readonly description: string;
14
+ readonly status: TaskStatus;
15
+ readonly version: bigint;
16
+ readonly createdAt: string;
17
+ readonly updatedAt: string;
18
+ readonly dependsOn: readonly string[];
19
+ readonly blockedBy: readonly string[];
20
+ readonly ready: boolean;
21
+ };
22
+ export type GraphTask = Omit<Task, "projectId" | "title" | "description" | "version"> & {
23
+ readonly titlePreview: string;
24
+ readonly titleTruncated: boolean;
25
+ };
26
+ export type TaskGraphSummary = {
27
+ readonly total: number;
28
+ readonly todo: number;
29
+ readonly inProgress: number;
30
+ readonly done: number;
31
+ readonly ready: number;
32
+ readonly blocked: number;
33
+ };
34
+ export type TaskGraph = {
35
+ readonly project: Project;
36
+ readonly summary: TaskGraphSummary;
37
+ readonly tasks: readonly GraphTask[];
38
+ };
39
+ export type Page<T> = {
40
+ readonly items: readonly T[];
41
+ readonly nextCursor: string | null;
42
+ };
43
+ export type CreateProjectInput = {
44
+ readonly name: string;
45
+ readonly repoUrl: string;
46
+ };
47
+ export type CreateTaskInput = {
48
+ readonly title: string;
49
+ readonly description?: string;
50
+ readonly dependsOn?: readonly string[];
51
+ };
52
+ export type UpdateTaskInput = {
53
+ readonly version: bigint;
54
+ readonly title?: string;
55
+ readonly description?: string;
56
+ readonly status?: TaskStatus;
57
+ readonly dependsOn?: readonly string[];
58
+ };
59
+ export type TaskFilters = {
60
+ readonly status?: TaskStatus;
61
+ readonly ready?: boolean;
62
+ };
63
+ export type ErrorDetails = {
64
+ readonly taskIds?: readonly string[];
65
+ readonly nodeCount?: number;
66
+ readonly edgeCount?: number;
67
+ readonly maxNodes?: number;
68
+ readonly maxEdges?: number;
69
+ };
70
+ export type ServerError = {
71
+ readonly code: string;
72
+ readonly message: string;
73
+ readonly requestId: string;
74
+ readonly details?: ErrorDetails;
75
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":""}
@@ -1,32 +1,22 @@
1
1
  import { formatError } from "../platform/diagnostics.js";
2
- import { commands } from "./commands.js";
3
- import { isHelp, UsageError } from "./context.js";
4
- const help = (registry) => `Usage: daynight <command>
5
-
6
- Commands:
7
- ${registry.map(({ name, description }) => ` ${name.padEnd(10)}${description}`).join("\n")}
8
-
9
- Options:
10
- -h, --help Show this help
11
- -v, --version Show the installed version
12
-
13
- Run daynight <command> --help for command usage.
14
- `;
2
+ import { commands, commandTree } from "./commands.js";
3
+ import { UsageError } from "./context.js";
4
+ import { renderCommandHelp, selectCommand } from "./schema.js";
15
5
  export const runCli = async (args, context, registry = commands) => {
16
6
  try {
17
- if (args.length === 0 || args.length === 1 && isHelp(args[0])) {
18
- context.stdout(help(registry));
7
+ const definition = registry === commands ? commandTree : { ...commandTree, commands: registry };
8
+ const selection = selectCommand(definition, args);
9
+ if (selection.kind === "help") {
10
+ context.stdout(renderCommandHelp(definition));
19
11
  return 0;
20
12
  }
21
- if (args.length === 1 && (args[0] === "--version" || args[0] === "-v")) {
13
+ if (selection.kind === "version") {
22
14
  context.stdout(`${context.version}\n`);
23
15
  return 0;
24
16
  }
25
- const registration = registry.find(({ name }) => name === args[0]);
26
- if (registration === undefined)
27
- throw new UsageError(`Unknown command ${JSON.stringify(args[0])}.`);
17
+ const registration = registry.find(({ name }) => name === selection.command.name);
28
18
  const command = await registration.load();
29
- await command.run(args.slice(1), context);
19
+ await command.run(selection.remaining, context);
30
20
  return 0;
31
21
  }
32
22
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/cli/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,IAAI,GAAG,CAAC,QAAwC,EAAU,EAAE,CAAC;;;EAGjE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;CAOzF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,IAAuB,EACvB,OAAmB,EACnB,QAAQ,GAAmC,QAAQ,EAClC,EAAE;IACnB,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpG,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,WAAW,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/cli/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,IAAuB,EACvB,OAAmB,EACnB,QAAQ,GAAmC,QAAQ,EAClC,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChG,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,WAAW,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { CliCommand } from "./context.js";
2
- export type CommandRegistration = {
3
- name: string;
4
- description: string;
2
+ import type { CommandDefinition } from "./schema.js";
3
+ export type CommandRegistration = CommandDefinition & {
5
4
  load: () => Promise<CliCommand>;
6
5
  };
7
6
  export declare const commands: readonly CommandRegistration[];
7
+ export declare const commandTree: CommandDefinition;
@@ -1,13 +1,38 @@
1
+ import { completionDefinition } from "../commands/completion/definition.js";
2
+ import { reviewDefinition } from "../commands/review/definition.js";
3
+ import { projectDefinition } from "../commands/project/definition.js";
4
+ import { taskDefinition } from "../commands/task/definition.js";
5
+ import { updateDefinition } from "../commands/update/definition.js";
1
6
  export const commands = [
2
7
  {
3
- name: "review",
4
- description: "Review GitHub pull requests and manage local review configuration",
8
+ ...reviewDefinition,
5
9
  load: async () => ({ run: (await import("../commands/review/command.js")).runReviewCommand }),
6
10
  },
7
11
  {
8
- name: "update",
9
- description: "Update this npm global installation to the latest version",
12
+ ...updateDefinition,
10
13
  load: async () => ({ run: (await import("../commands/update/command.js")).runUpdateCommand }),
11
14
  },
15
+ {
16
+ ...completionDefinition,
17
+ load: async () => ({ run: (await import("../commands/completion/command.js")).runCompletionCommand }),
18
+ },
19
+ {
20
+ ...projectDefinition,
21
+ load: async () => ({ run: (await import("../commands/project/command.js")).runProjectCommand }),
22
+ },
23
+ {
24
+ ...taskDefinition,
25
+ load: async () => ({ run: (await import("../commands/task/command.js")).runTaskCommand }),
26
+ },
12
27
  ];
28
+ export const commandTree = {
29
+ name: "daynight",
30
+ description: "A client command toolkit for development workflows",
31
+ commands: commands.map(({ load, ...definition }) => definition),
32
+ options: [
33
+ { names: ["-h", "--help"], description: "Show this help", action: "help" },
34
+ { names: ["-v", "--version"], description: "Show the installed version", action: "version" },
35
+ ],
36
+ details: "Run daynight <command> --help for command usage.",
37
+ };
13
38
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,QAAQ,GAAmC;IACtD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mEAAmE;QAChF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;CACF,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMpE,MAAM,CAAC,MAAM,QAAQ,GAAmC;IACtD;QACE,GAAG,gBAAgB;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;IACD;QACE,GAAG,gBAAgB;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;IACD;QACE,GAAG,oBAAoB;QACvB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;KACtG;IACD;QACE,GAAG,iBAAiB;QACpB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;KAChG;IACD;QACE,GAAG,cAAc;QACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;KAC1F;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,oDAAoD;IACjE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;IAC/D,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1E,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,EAAE,SAAS,EAAE;KAC7F;IACD,OAAO,EAAE,kDAAkD;CAC5D,CAAC"}
@@ -0,0 +1,53 @@
1
+ export type CommandOption = {
2
+ names: readonly string[];
3
+ description: string;
4
+ value?: {
5
+ name: string;
6
+ kind: "directory" | "text";
7
+ allowEmpty?: boolean;
8
+ choices?: readonly string[];
9
+ };
10
+ required?: boolean;
11
+ repeatable?: boolean;
12
+ action?: "help" | "version";
13
+ };
14
+ export type CommandArgument = {
15
+ name: string;
16
+ description: string;
17
+ choices?: readonly string[];
18
+ };
19
+ export type CommandDefinition = {
20
+ name: string;
21
+ description: string;
22
+ aliases?: readonly string[];
23
+ commands?: readonly CommandDefinition[];
24
+ options?: readonly CommandOption[];
25
+ arguments?: readonly CommandArgument[];
26
+ allowOptionsTerminator?: boolean;
27
+ details?: string;
28
+ };
29
+ type CommandLocation = {
30
+ command: CommandDefinition;
31
+ path: readonly string[];
32
+ };
33
+ export type CommandSelection = CommandLocation & ({
34
+ kind: "help";
35
+ } | {
36
+ kind: "version";
37
+ } | {
38
+ kind: "selected";
39
+ remaining: readonly string[];
40
+ });
41
+ export type ParsedCommand = CommandLocation & ({
42
+ kind: "help";
43
+ } | {
44
+ kind: "version";
45
+ } | {
46
+ kind: "run";
47
+ values: readonly string[];
48
+ options: ReadonlyMap<string, string | readonly string[] | true>;
49
+ });
50
+ export declare const selectCommand: (definition: CommandDefinition, args: readonly string[], path?: readonly string[], helpCommand?: string) => CommandSelection;
51
+ export declare const parseCommand: (definition: CommandDefinition, args: readonly string[], path?: readonly string[], helpCommand?: string) => ParsedCommand;
52
+ export declare const renderCommandHelp: (definition: CommandDefinition, path?: readonly string[]) => string;
53
+ export {};
@@ -0,0 +1,113 @@
1
+ import { UsageError } from "./context.js";
2
+ const matchesCommand = (command, name) => command.name === name || command.aliases?.includes(name) === true;
3
+ const informationAction = (command, args) => args.length === 1 ? command.options?.find((option) => option.names.includes(args[0]))?.action : undefined;
4
+ export const selectCommand = (definition, args, path = [definition.name], helpCommand = `${path.join(" ")} --help`) => {
5
+ const action = informationAction(definition, args);
6
+ if (action !== undefined)
7
+ return { kind: action, command: definition, path };
8
+ if (args.length === 0)
9
+ return { kind: "help", command: definition, path };
10
+ const command = definition.commands?.find((candidate) => matchesCommand(candidate, args[0]));
11
+ if (command === undefined)
12
+ throw new UsageError(`Unknown command ${JSON.stringify(args[0])}.`, helpCommand);
13
+ return { kind: "selected", command, path: [...path, command.name], remaining: args.slice(1) };
14
+ };
15
+ export const parseCommand = (definition, args, path = [definition.name], helpCommand = `${path.join(" ")} --help`) => {
16
+ if (definition.commands !== undefined) {
17
+ const selection = selectCommand(definition, args, path, helpCommand);
18
+ if (selection.kind !== "selected")
19
+ return selection;
20
+ return parseCommand(selection.command, selection.remaining, selection.path, helpCommand);
21
+ }
22
+ const action = informationAction(definition, args);
23
+ if (action !== undefined)
24
+ return { kind: action, command: definition, path };
25
+ const values = [];
26
+ const options = new Map();
27
+ let optionsTerminated = false;
28
+ for (let index = 0; index < args.length; index++) {
29
+ const argument = args[index];
30
+ if (!optionsTerminated && argument === "--" && definition.allowOptionsTerminator === true) {
31
+ optionsTerminated = true;
32
+ continue;
33
+ }
34
+ if (!optionsTerminated && argument.startsWith("-")) {
35
+ const separator = argument.indexOf("=");
36
+ const inline = separator !== -1;
37
+ const optionName = inline ? argument.slice(0, separator) : argument;
38
+ const option = definition.options?.find((candidate) => candidate.names.includes(optionName));
39
+ if (option === undefined || option.action !== undefined || inline && option.value?.kind !== "text") {
40
+ throw new UsageError(`Unknown ${definition.name} option ${JSON.stringify(argument)}.`, helpCommand);
41
+ }
42
+ const name = option.names[0];
43
+ if (options.has(name) && option.repeatable !== true)
44
+ throw new UsageError(`Specify ${name} only once.`, helpCommand);
45
+ if (option.value === undefined) {
46
+ options.set(name, true);
47
+ }
48
+ else {
49
+ const value = inline ? argument.slice(separator + 1) : args[++index];
50
+ if (value === undefined || value === "" && option.value.allowEmpty !== true || !inline && value.startsWith("-")) {
51
+ throw new UsageError(`${name} requires a ${option.value.name} value.`, helpCommand);
52
+ }
53
+ if (option.value.choices !== undefined && !option.value.choices.includes(value)) {
54
+ throw new UsageError(`Unknown ${option.value.name} ${JSON.stringify(value)}. Expected ${option.value.choices.join(" or ")}.`, helpCommand);
55
+ }
56
+ if (option.repeatable === true) {
57
+ const previous = options.get(name);
58
+ if (previous === undefined)
59
+ options.set(name, [value]);
60
+ else
61
+ previous.push(value);
62
+ }
63
+ else
64
+ options.set(name, value);
65
+ }
66
+ continue;
67
+ }
68
+ const positional = definition.arguments?.[values.length];
69
+ if (positional === undefined)
70
+ throw new UsageError(`Unexpected ${definition.name} argument ${JSON.stringify(argument)}.`, helpCommand);
71
+ if (argument === "")
72
+ throw new UsageError(`${definition.name} requires a ${positional.name} value.`, helpCommand);
73
+ if (positional.choices !== undefined && !positional.choices.includes(argument)) {
74
+ throw new UsageError(`Unknown ${positional.name} ${JSON.stringify(argument)}. Expected ${positional.choices.join(" or ")}.`, helpCommand);
75
+ }
76
+ values.push(argument);
77
+ }
78
+ const missing = definition.arguments?.[values.length];
79
+ if (missing !== undefined)
80
+ throw new UsageError(`${definition.name} requires a ${missing.name} value.`, helpCommand);
81
+ for (const option of definition.options ?? []) {
82
+ const name = option.names[0];
83
+ if (option.required === true && !options.has(name))
84
+ throw new UsageError(`${definition.name} requires ${name}.`, helpCommand);
85
+ }
86
+ return { kind: "run", command: definition, path, values, options };
87
+ };
88
+ const optionLabel = (option) => `${option.names.join(", ")}${option.value === undefined ? "" : ` <${option.value.name}>`}`;
89
+ const optionUsage = (option) => `${option.names[0]}${option.value === undefined ? "" : ` <${option.value.name}>`}${option.repeatable === true ? "..." : ""}`;
90
+ const renderRows = (rows) => {
91
+ const width = Math.max(...rows.map(([label]) => label.length)) + 2;
92
+ return rows.map(([label, description]) => ` ${label.padEnd(width)}${description}`).join("\n");
93
+ };
94
+ export const renderCommandHelp = (definition, path = [definition.name]) => {
95
+ const suffix = definition.commands !== undefined ? " <command>" : [
96
+ ...(definition.arguments ?? []).map(({ name }) => ` <${name}>`),
97
+ ...(definition.options ?? []).filter(({ action }) => action === undefined).map((option) => option.required === true ? ` ${optionUsage(option)}` : ` [${optionUsage(option)}]`),
98
+ ].join("");
99
+ const paths = [path, ...(definition.aliases ?? []).map((alias) => [...path.slice(0, -1), alias])];
100
+ const sections = [paths.map((parts, index) => `${index === 0 ? "Usage: " : " "}${parts.join(" ")}${suffix}`).join("\n")];
101
+ if (definition.commands === undefined)
102
+ sections.push(definition.description);
103
+ if (definition.commands !== undefined)
104
+ sections.push(`Commands:\n${renderRows(definition.commands.map((command) => [[command.name, ...(command.aliases ?? [])].join(", "), command.description]))}`);
105
+ if (definition.arguments !== undefined)
106
+ sections.push(`Arguments:\n${renderRows(definition.arguments.map(({ name, description }) => [`<${name}>`, description]))}`);
107
+ if (definition.options !== undefined)
108
+ sections.push(`Options:\n${renderRows(definition.options.map((option) => [optionLabel(option), option.description]))}`);
109
+ if (definition.details !== undefined)
110
+ sections.push(definition.details);
111
+ return `${sections.join("\n\n")}\n`;
112
+ };
113
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CommandDefinition } from "../../cli/schema.js";
2
+ export declare const renderBashCompletion: (root: CommandDefinition) => string;