stego-cli 0.4.1 → 0.4.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 (126) hide show
  1. package/README.md +6 -0
  2. package/dist/shared/src/contracts/cli/envelopes.js +19 -0
  3. package/dist/shared/src/contracts/cli/errors.js +14 -0
  4. package/dist/shared/src/contracts/cli/exit-codes.js +15 -0
  5. package/dist/shared/src/contracts/cli/index.js +6 -0
  6. package/dist/shared/src/contracts/cli/metadata.js +1 -0
  7. package/dist/shared/src/contracts/cli/operations.js +1 -0
  8. package/dist/shared/src/domain/comments/anchors.js +1 -0
  9. package/dist/shared/src/domain/comments/index.js +4 -0
  10. package/dist/shared/src/domain/comments/serializer.js +1 -0
  11. package/dist/shared/src/domain/comments/thread-key.js +21 -0
  12. package/dist/shared/src/domain/frontmatter/index.js +3 -0
  13. package/dist/shared/src/domain/frontmatter/parser.js +34 -0
  14. package/dist/shared/src/domain/frontmatter/serializer.js +32 -0
  15. package/dist/shared/src/domain/frontmatter/validators.js +47 -0
  16. package/dist/shared/src/domain/project/index.js +4 -0
  17. package/dist/shared/src/domain/stages/index.js +20 -0
  18. package/dist/shared/src/index.js +6 -0
  19. package/dist/shared/src/utils/guards.js +6 -0
  20. package/dist/shared/src/utils/index.js +3 -0
  21. package/dist/shared/src/utils/invariant.js +5 -0
  22. package/dist/shared/src/utils/result.js +6 -0
  23. package/dist/stego-cli/src/app/cli-version.js +32 -0
  24. package/dist/stego-cli/src/app/command-context.js +1 -0
  25. package/dist/stego-cli/src/app/command-registry.js +121 -0
  26. package/dist/stego-cli/src/app/create-cli-app.js +42 -0
  27. package/dist/stego-cli/src/app/error-boundary.js +42 -0
  28. package/dist/stego-cli/src/app/index.js +6 -0
  29. package/dist/stego-cli/src/app/output-renderer.js +6 -0
  30. package/dist/stego-cli/src/main.js +14 -0
  31. package/dist/stego-cli/src/modules/comments/application/comment-operations.js +457 -0
  32. package/dist/stego-cli/src/modules/comments/commands/comments-add.js +40 -0
  33. package/dist/stego-cli/src/modules/comments/commands/comments-clear-resolved.js +32 -0
  34. package/dist/stego-cli/src/modules/comments/commands/comments-delete.js +33 -0
  35. package/dist/stego-cli/src/modules/comments/commands/comments-read.js +32 -0
  36. package/dist/stego-cli/src/modules/comments/commands/comments-reply.js +36 -0
  37. package/dist/stego-cli/src/modules/comments/commands/comments-set-status.js +35 -0
  38. package/dist/stego-cli/src/modules/comments/commands/comments-sync-anchors.js +33 -0
  39. package/dist/stego-cli/src/modules/comments/domain/comment-policy.js +14 -0
  40. package/dist/stego-cli/src/modules/comments/index.js +20 -0
  41. package/dist/stego-cli/src/modules/comments/infra/comments-repo.js +68 -0
  42. package/dist/stego-cli/src/modules/comments/types.js +1 -0
  43. package/dist/stego-cli/src/modules/compile/application/compile-manuscript.js +16 -0
  44. package/dist/stego-cli/src/modules/compile/commands/build.js +51 -0
  45. package/dist/stego-cli/src/modules/compile/domain/compile-structure.js +105 -0
  46. package/dist/stego-cli/src/modules/compile/index.js +8 -0
  47. package/dist/stego-cli/src/modules/compile/infra/dist-writer.js +8 -0
  48. package/dist/stego-cli/src/modules/compile/types.js +1 -0
  49. package/dist/stego-cli/src/modules/export/application/run-export.js +29 -0
  50. package/dist/stego-cli/src/modules/export/commands/export.js +61 -0
  51. package/dist/stego-cli/src/modules/export/domain/exporter.js +6 -0
  52. package/dist/stego-cli/src/modules/export/index.js +8 -0
  53. package/dist/stego-cli/src/modules/export/types.js +1 -0
  54. package/dist/stego-cli/src/modules/index.js +22 -0
  55. package/dist/stego-cli/src/modules/manuscript/application/create-manuscript.js +107 -0
  56. package/dist/stego-cli/src/modules/manuscript/application/order-inference.js +56 -0
  57. package/dist/stego-cli/src/modules/manuscript/commands/new-manuscript.js +54 -0
  58. package/dist/stego-cli/src/modules/manuscript/domain/manuscript.js +1 -0
  59. package/dist/stego-cli/src/modules/manuscript/index.js +9 -0
  60. package/dist/stego-cli/src/modules/manuscript/infra/manuscript-repo.js +39 -0
  61. package/dist/stego-cli/src/modules/manuscript/types.js +1 -0
  62. package/dist/stego-cli/src/modules/metadata/application/apply-metadata.js +45 -0
  63. package/dist/stego-cli/src/modules/metadata/application/read-metadata.js +18 -0
  64. package/dist/stego-cli/src/modules/metadata/commands/metadata-apply.js +38 -0
  65. package/dist/stego-cli/src/modules/metadata/commands/metadata-read.js +33 -0
  66. package/dist/stego-cli/src/modules/metadata/domain/metadata.js +1 -0
  67. package/dist/stego-cli/src/modules/metadata/index.js +11 -0
  68. package/dist/stego-cli/src/modules/metadata/infra/metadata-repo.js +68 -0
  69. package/dist/stego-cli/src/modules/metadata/types.js +1 -0
  70. package/dist/stego-cli/src/modules/project/application/create-project.js +203 -0
  71. package/dist/stego-cli/src/modules/project/application/infer-project.js +72 -0
  72. package/dist/stego-cli/src/modules/project/commands/new-project.js +86 -0
  73. package/dist/stego-cli/src/modules/project/domain/project.js +1 -0
  74. package/dist/stego-cli/src/modules/project/index.js +9 -0
  75. package/dist/stego-cli/src/modules/project/infra/project-repo.js +27 -0
  76. package/dist/stego-cli/src/modules/project/types.js +1 -0
  77. package/dist/stego-cli/src/modules/quality/application/inspect-project.js +603 -0
  78. package/dist/stego-cli/src/modules/quality/application/lint-runner.js +313 -0
  79. package/dist/stego-cli/src/modules/quality/application/stage-check.js +87 -0
  80. package/dist/stego-cli/src/modules/quality/commands/check-stage.js +54 -0
  81. package/dist/stego-cli/src/modules/quality/commands/lint.js +51 -0
  82. package/dist/stego-cli/src/modules/quality/commands/validate.js +50 -0
  83. package/dist/stego-cli/src/modules/quality/domain/issues.js +1 -0
  84. package/dist/stego-cli/src/modules/quality/domain/policies.js +1 -0
  85. package/dist/stego-cli/src/modules/quality/index.js +14 -0
  86. package/dist/stego-cli/src/modules/quality/infra/cspell-adapter.js +1 -0
  87. package/dist/stego-cli/src/modules/quality/infra/markdownlint-adapter.js +1 -0
  88. package/dist/stego-cli/src/modules/quality/types.js +1 -0
  89. package/dist/stego-cli/src/modules/scaffold/application/scaffold-workspace.js +307 -0
  90. package/dist/stego-cli/src/modules/scaffold/commands/init.js +34 -0
  91. package/dist/stego-cli/src/modules/scaffold/domain/templates.js +182 -0
  92. package/dist/stego-cli/src/modules/scaffold/index.js +8 -0
  93. package/dist/stego-cli/src/modules/scaffold/infra/template-repo.js +33 -0
  94. package/dist/stego-cli/src/modules/scaffold/types.js +1 -0
  95. package/dist/stego-cli/src/modules/spine/application/create-category.js +14 -0
  96. package/dist/stego-cli/src/modules/spine/application/create-entry.js +9 -0
  97. package/dist/stego-cli/src/modules/spine/application/read-catalog.js +13 -0
  98. package/dist/stego-cli/src/modules/spine/commands/spine-deprecated-aliases.js +33 -0
  99. package/dist/stego-cli/src/modules/spine/commands/spine-new-category.js +64 -0
  100. package/dist/stego-cli/src/modules/spine/commands/spine-new-entry.js +65 -0
  101. package/dist/stego-cli/src/modules/spine/commands/spine-read.js +49 -0
  102. package/dist/{spine/spine-domain.js → stego-cli/src/modules/spine/domain/spine.js} +13 -7
  103. package/dist/stego-cli/src/modules/spine/index.js +16 -0
  104. package/dist/stego-cli/src/modules/spine/infra/spine-repo.js +46 -0
  105. package/dist/stego-cli/src/modules/spine/types.js +1 -0
  106. package/dist/stego-cli/src/modules/workspace/application/discover-projects.js +18 -0
  107. package/dist/stego-cli/src/modules/workspace/application/resolve-workspace.js +73 -0
  108. package/dist/stego-cli/src/modules/workspace/commands/list-projects.js +40 -0
  109. package/dist/stego-cli/src/modules/workspace/index.js +9 -0
  110. package/dist/stego-cli/src/modules/workspace/infra/workspace-repo.js +37 -0
  111. package/dist/stego-cli/src/modules/workspace/types.js +1 -0
  112. package/dist/stego-cli/src/platform/clock.js +3 -0
  113. package/dist/stego-cli/src/platform/fs.js +13 -0
  114. package/dist/stego-cli/src/platform/index.js +3 -0
  115. package/dist/stego-cli/src/platform/temp-files.js +6 -0
  116. package/package.json +20 -11
  117. package/dist/comments/comments-command.js +0 -499
  118. package/dist/comments/errors.js +0 -20
  119. package/dist/metadata/metadata-command.js +0 -127
  120. package/dist/metadata/metadata-domain.js +0 -209
  121. package/dist/spine/spine-command.js +0 -129
  122. package/dist/stego-cli.js +0 -2264
  123. /package/dist/{exporters/exporter-types.js → shared/src/contracts/cli/comments.js} +0 -0
  124. /package/dist/{comments/comment-domain.js → shared/src/domain/comments/parser.js} +0 -0
  125. /package/dist/{exporters → stego-cli/src/modules/export/infra}/markdown-exporter.js +0 -0
  126. /package/dist/{exporters → stego-cli/src/modules/export/infra}/pandoc-exporter.js +0 -0
@@ -0,0 +1,86 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { writeJson, writeText } from "../../../app/output-renderer.js";
3
+ import { createProject, parseProjectOutputFormat, parseProseFontMode } from "../application/create-project.js";
4
+ import { resolveWorkspaceContext } from "../../workspace/index.js";
5
+ const PROSE_FONT_PROMPT = "Switch workspace to proportional (prose-style) font? (recommended)";
6
+ export function registerNewProjectCommand(registry) {
7
+ registry.register({
8
+ name: "new-project",
9
+ description: "Create a new Stego project",
10
+ options: [
11
+ { flags: "--project <project-id>", description: "Project id" },
12
+ { flags: "--title <title>", description: "Project title" },
13
+ { flags: "--prose-font <mode>", description: "yes|no|prompt" },
14
+ { flags: "--format <format>", description: "text|json" },
15
+ { flags: "--root <path>", description: "Workspace root path" }
16
+ ],
17
+ action: async (context) => {
18
+ const workspace = resolveWorkspaceContext({
19
+ cwd: context.cwd,
20
+ rootOption: readStringOption(context.options, "root")
21
+ });
22
+ const outputFormat = parseProjectOutputFormat(readStringOption(context.options, "format"));
23
+ const proseFontMode = parseProseFontMode(readStringOption(context.options, "proseFont", "prose-font"));
24
+ const enableProseFont = proseFontMode === "prompt"
25
+ ? await promptYesNo(PROSE_FONT_PROMPT, true, context.stdout, context.env)
26
+ : proseFontMode === "yes";
27
+ const result = createProject({
28
+ workspace,
29
+ projectId: readStringOption(context.options, "project"),
30
+ title: readStringOption(context.options, "title"),
31
+ enableProseFont
32
+ });
33
+ if (outputFormat === "json") {
34
+ writeJson({
35
+ ok: true,
36
+ operation: "new-project",
37
+ result
38
+ });
39
+ return;
40
+ }
41
+ writeText(`Created project: ${result.projectPath}`);
42
+ for (const filePath of result.files) {
43
+ writeText(`- ${filePath}`);
44
+ }
45
+ }
46
+ });
47
+ }
48
+ async function promptYesNo(question, defaultYes, stdout, env) {
49
+ if (env.CI || !process.stdin.isTTY || !stdout.isTTY) {
50
+ return defaultYes;
51
+ }
52
+ const rl = createInterface({
53
+ input: process.stdin,
54
+ output: stdout
55
+ });
56
+ const suffix = defaultYes ? " [Y/n] " : " [y/N] ";
57
+ try {
58
+ while (true) {
59
+ const answer = (await rl.question(`${question}${suffix}`)).trim().toLowerCase();
60
+ if (!answer) {
61
+ return defaultYes;
62
+ }
63
+ if (answer === "y" || answer === "yes") {
64
+ return true;
65
+ }
66
+ if (answer === "n" || answer === "no") {
67
+ return false;
68
+ }
69
+ }
70
+ }
71
+ finally {
72
+ rl.close();
73
+ }
74
+ }
75
+ function readStringOption(options, ...keys) {
76
+ for (const key of keys) {
77
+ const value = options[key];
78
+ if (typeof value === "string") {
79
+ return value;
80
+ }
81
+ if (typeof value === "number") {
82
+ return String(value);
83
+ }
84
+ }
85
+ return undefined;
86
+ }
@@ -0,0 +1,9 @@
1
+ import { registerNewProjectCommand } from "./commands/new-project.js";
2
+ export const projectModule = {
3
+ registerCommands(registry) {
4
+ registerNewProjectCommand(registry);
5
+ }
6
+ };
7
+ export * from "./types.js";
8
+ export * from "./application/create-project.js";
9
+ export * from "./application/infer-project.js";
@@ -0,0 +1,27 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export function listProjectIds(workspace) {
4
+ const projectsDir = path.join(workspace.repoRoot, workspace.config.projectsDir);
5
+ if (!fs.existsSync(projectsDir)) {
6
+ return [];
7
+ }
8
+ return fs.readdirSync(projectsDir, { withFileTypes: true })
9
+ .filter((entry) => entry.isDirectory())
10
+ .map((entry) => entry.name)
11
+ .filter((projectId) => fs.existsSync(path.join(projectsDir, projectId, "stego-project.json")))
12
+ .sort((left, right) => left.localeCompare(right));
13
+ }
14
+ export function readJsonFile(filePath) {
15
+ const raw = fs.readFileSync(filePath, "utf8");
16
+ return JSON.parse(raw);
17
+ }
18
+ export function pathExists(filePath) {
19
+ return fs.existsSync(filePath);
20
+ }
21
+ export function ensureDirectory(dirPath) {
22
+ fs.mkdirSync(dirPath, { recursive: true });
23
+ }
24
+ export function writeTextFile(filePath, contents) {
25
+ ensureDirectory(path.dirname(filePath));
26
+ fs.writeFileSync(filePath, contents, "utf8");
27
+ }
@@ -0,0 +1 @@
1
+ export {};