@codetreker/daynight 0.6.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cli/commands.js +2 -0
  2. package/dist/cli/commands.js.map +1 -1
  3. package/dist/cli/context.d.ts +2 -0
  4. package/dist/cli/context.js +2 -0
  5. package/dist/cli/context.js.map +1 -1
  6. package/dist/cli/prompts.d.ts +9 -0
  7. package/dist/cli/prompts.js +55 -0
  8. package/dist/cli/prompts.js.map +1 -0
  9. package/dist/cli/schema.d.ts +1 -0
  10. package/dist/cli/schema.js +7 -2
  11. package/dist/cli/schema.js.map +1 -1
  12. package/dist/commands/completion/bash.js +12 -5
  13. package/dist/commands/completion/bash.js.map +1 -1
  14. package/dist/commands/completion/command.js +14 -6
  15. package/dist/commands/completion/command.js.map +1 -1
  16. package/dist/commands/completion/definition.js +18 -4
  17. package/dist/commands/completion/definition.js.map +1 -1
  18. package/dist/commands/completion/setup.d.ts +21 -0
  19. package/dist/commands/completion/setup.js +210 -0
  20. package/dist/commands/completion/setup.js.map +1 -0
  21. package/dist/commands/completion/zsh.js +35 -6
  22. package/dist/commands/completion/zsh.js.map +1 -1
  23. package/dist/commands/project/command.js +24 -3
  24. package/dist/commands/project/command.js.map +1 -1
  25. package/dist/commands/project/definition.js +5 -4
  26. package/dist/commands/project/definition.js.map +1 -1
  27. package/dist/commands/review/command.js +7 -2
  28. package/dist/commands/review/command.js.map +1 -1
  29. package/dist/commands/review/config.js +10 -3
  30. package/dist/commands/review/config.js.map +1 -1
  31. package/dist/commands/review/repositories.d.ts +2 -0
  32. package/dist/commands/review/repositories.js +2 -2
  33. package/dist/commands/review/repositories.js.map +1 -1
  34. package/dist/commands/server/runtime.js +19 -3
  35. package/dist/commands/server/runtime.js.map +1 -1
  36. package/dist/commands/setup/command.d.ts +2 -0
  37. package/dist/commands/setup/command.js +21 -0
  38. package/dist/commands/setup/command.js.map +1 -0
  39. package/dist/commands/setup/definition.d.ts +2 -0
  40. package/dist/commands/setup/definition.js +12 -0
  41. package/dist/commands/setup/definition.js.map +1 -0
  42. package/dist/config/errors.d.ts +9 -0
  43. package/dist/config/errors.js +24 -0
  44. package/dist/config/errors.js.map +1 -0
  45. package/dist/config/files.d.ts +1 -1
  46. package/dist/config/files.js +36 -2
  47. package/dist/config/files.js.map +1 -1
  48. package/dist/config/server.js +2 -1
  49. package/dist/config/server.js.map +1 -1
  50. package/dist/config/setup.d.ts +10 -0
  51. package/dist/config/setup.js +142 -0
  52. package/dist/config/setup.js.map +1 -0
  53. package/package.json +2 -2
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/config/files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/config/files.ts"],"names":[],"mappings":"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"}
@@ -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 Error("serverUrl is not configured; set it to the daynight-server HTTP(S) origin.");
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;AAKrD,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,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAChG,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"}
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,142 @@
1
+ import { Document } from "yaml";
2
+ import { SetupCancelledError } from "../cli/prompts.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
+ const withCancellation = async (action, supplied) => {
19
+ if (supplied !== undefined)
20
+ return action(supplied);
21
+ const controller = new AbortController();
22
+ const signals = process.platform === "win32" ? ["SIGINT", "SIGTERM", "SIGBREAK"] : ["SIGINT", "SIGTERM"];
23
+ const cancel = () => controller.abort(new SetupCancelledError());
24
+ for (const signal of signals)
25
+ process.on(signal, cancel);
26
+ try {
27
+ return await action(controller.signal);
28
+ }
29
+ finally {
30
+ for (const signal of signals)
31
+ process.off(signal, cancel);
32
+ }
33
+ };
34
+ export const configure = async (context, input, capability, suppliedSignal) => withCancellation(async (signal) => {
35
+ const paths = resolveConfigurationPaths(context.homeDirectory());
36
+ const source = await optionalSource(context, signal);
37
+ const baseline = source === undefined ? {} : parseConfigurationDocument(source, paths).mapping;
38
+ const ask = async (question) => {
39
+ if (context.prompt?.isInteractive !== true)
40
+ throw new Error("Interactive setup requires terminal input and stderr. Use daynight setup --server-url <url> or daynight setup --review-repo <remote>.");
41
+ signal.throwIfAborted();
42
+ const answer = await context.prompt.ask(question, signal);
43
+ signal.throwIfAborted();
44
+ return answer;
45
+ };
46
+ const retry = async (question, validate) => {
47
+ for (;;) {
48
+ const answer = await ask(question);
49
+ try {
50
+ return await validate(answer);
51
+ }
52
+ catch (cause) {
53
+ signal.throwIfAborted();
54
+ if (cause instanceof SetupCancelledError)
55
+ throw cause;
56
+ context.stderr(`${cause instanceof Error ? cause.message : String(cause)}\n`);
57
+ }
58
+ }
59
+ };
60
+ try {
61
+ let server = input?.serverUrl !== undefined || capability === "server";
62
+ let review = input?.reviewRepository !== undefined || capability === "review";
63
+ if (input === undefined && capability === undefined) {
64
+ const selected = await retry("Configure (server/review/both): ", (answer) => {
65
+ if (!["server", "review", "both"].includes(answer))
66
+ throw new Error("Choose server, review, or both.");
67
+ return answer;
68
+ });
69
+ server = selected !== "review";
70
+ review = selected !== "server";
71
+ }
72
+ let serverUrl = input?.serverUrl;
73
+ if (server && serverUrl === undefined)
74
+ serverUrl = await retry("Server URL (for example http://127.0.0.1:8787): ", normalizeServerUrl);
75
+ if (serverUrl !== undefined)
76
+ serverUrl = normalizeServerUrl(serverUrl);
77
+ let reviewRepository = input?.reviewRepository;
78
+ let reviewTools;
79
+ let reviewPaths;
80
+ let reviewOptions;
81
+ if (review) {
82
+ const { validateRegistrationConfigurationSource, remoteIdentity } = await import("../commands/review/config.js");
83
+ reviewTools = await import("../commands/review/repositories.js");
84
+ reviewPaths = (await import("../commands/review/paths.js")).resolveReviewPaths(context.homeDirectory());
85
+ reviewOptions = { homeDirectory: context.homeDirectory(), workingDirectory: context.workingDirectory() };
86
+ if (source !== undefined)
87
+ await validateRegistrationConfigurationSource(source, reviewPaths);
88
+ if (reviewRepository === undefined) {
89
+ const remote = await retry("Review repository (HTTPS or SSH GitHub address): ", (answer) => { remoteIdentity(answer, "remote"); return answer; });
90
+ reviewRepository = await retry("Review clone path (blank for configured default): ", async (answer) => {
91
+ const candidate = answer === "" ? { remote } : { remote, path: answer };
92
+ await reviewTools.updateRepositoryConfiguration(source, candidate, reviewPaths, reviewOptions);
93
+ return candidate;
94
+ });
95
+ }
96
+ await reviewTools.updateRepositoryConfiguration(source, reviewRepository, reviewPaths, reviewOptions);
97
+ }
98
+ const selectedFields = [...(server ? ["serverUrl"] : []), ...(review ? ["repositoryRoot", "repositories"] : [])];
99
+ const fingerprint = (mapping) => JSON.stringify(selectedFields.map((field) => [field, Object.hasOwn(mapping, field), mapping[field]]));
100
+ signal.throwIfAborted();
101
+ await updateConfigurationFile(paths, async (currentSource) => {
102
+ const current = currentSource === undefined ? undefined : parseConfigurationDocument(currentSource, paths);
103
+ if (fingerprint(current?.mapping ?? {}) !== fingerprint(baseline))
104
+ throw new Error("Configuration changed during setup. Run setup again to review the current values.");
105
+ const document = current?.document ?? new Document({});
106
+ if (serverUrl !== undefined)
107
+ document.set("serverUrl", serverUrl);
108
+ let updatedSource = document.toString();
109
+ if (reviewRepository !== undefined) {
110
+ const result = await reviewTools.updateRepositoryConfiguration(updatedSource, reviewRepository, reviewPaths, reviewOptions);
111
+ if (result.source !== undefined)
112
+ updatedSource = result.source;
113
+ }
114
+ return { result: undefined, source: updatedSource };
115
+ }, signal);
116
+ context.stderr(`Configuration saved to ${paths.configFile}.\n`);
117
+ }
118
+ catch (cause) {
119
+ if (signal.aborted)
120
+ throw new SetupCancelledError({ cause: signal.reason });
121
+ throw cause;
122
+ }
123
+ finally {
124
+ context.prompt?.close();
125
+ }
126
+ }, suppliedSignal);
127
+ export const guideMissingConfiguration = async (context, capability, load, signal) => {
128
+ try {
129
+ return await load();
130
+ }
131
+ catch (cause) {
132
+ if (!isMissingConfiguration(cause, capability === "server" ? "serverUrl" : "repositories"))
133
+ throw cause;
134
+ if (context.prompt?.isInteractive !== true) {
135
+ const command = capability === "server" ? "daynight setup --server-url <url>" : "daynight setup --review-repo <remote>";
136
+ throw new Error(`${cause instanceof Error ? cause.message : String(cause)} Run ${command} to configure it.`, { cause: cause instanceof MissingConfigurationFileError ? cause.cause : cause });
137
+ }
138
+ await configure(context, undefined, capability, signal);
139
+ return load();
140
+ }
141
+ };
142
+ //# 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codetreker/daynight",
3
- "version": "0.6.1",
3
+ "version": "0.8.1",
4
4
  "description": "A client command toolkit for development workflows",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,5 +40,5 @@
40
40
  "vite": "8.3.4",
41
41
  "vitest": "5.0.5"
42
42
  },
43
- "gitHead": "64b69a3ab864f99f6914b9217dbfbebde60345aa"
43
+ "gitHead": "a1b8855637ad06741b810f87601adbb1ad34f8c2"
44
44
  }