cognetivy 0.1.34 → 1.0.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 (183) hide show
  1. package/dist/auth-login-server.d.ts +13 -0
  2. package/dist/auth-login-server.d.ts.map +1 -0
  3. package/dist/auth-login-server.js +80 -0
  4. package/dist/auth-login-server.js.map +1 -0
  5. package/dist/cli-docs.d.ts +31 -0
  6. package/dist/cli-docs.d.ts.map +1 -0
  7. package/dist/cli-docs.js +239 -0
  8. package/dist/cli-docs.js.map +1 -0
  9. package/dist/cli.js +1175 -163
  10. package/dist/cli.js.map +1 -1
  11. package/dist/cloud-client.d.ts +157 -0
  12. package/dist/cloud-client.d.ts.map +1 -0
  13. package/dist/cloud-client.js +190 -0
  14. package/dist/cloud-client.js.map +1 -0
  15. package/dist/core/action-names.d.ts +15 -0
  16. package/dist/core/action-names.d.ts.map +1 -0
  17. package/dist/core/action-names.js +32 -0
  18. package/dist/core/action-names.js.map +1 -0
  19. package/dist/core/collection-validate.d.ts +51 -0
  20. package/dist/core/collection-validate.d.ts.map +1 -0
  21. package/dist/core/collection-validate.js +162 -0
  22. package/dist/core/collection-validate.js.map +1 -0
  23. package/dist/core/index.d.ts +10 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +10 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/core/next-step-engine.d.ts +20 -0
  28. package/dist/core/next-step-engine.d.ts.map +1 -0
  29. package/dist/core/next-step-engine.js +233 -0
  30. package/dist/core/next-step-engine.js.map +1 -0
  31. package/dist/core/types.d.ts +73 -0
  32. package/dist/core/types.d.ts.map +1 -0
  33. package/dist/core/types.js +15 -0
  34. package/dist/core/types.js.map +1 -0
  35. package/dist/core/workflow-validate.d.ts +25 -0
  36. package/dist/core/workflow-validate.d.ts.map +1 -0
  37. package/dist/core/workflow-validate.js +116 -0
  38. package/dist/core/workflow-validate.js.map +1 -0
  39. package/dist/credentials.d.ts +9 -0
  40. package/dist/credentials.d.ts.map +1 -0
  41. package/dist/credentials.js +49 -0
  42. package/dist/credentials.js.map +1 -0
  43. package/dist/default-collection-schema.d.ts.map +1 -1
  44. package/dist/default-collection-schema.js +11 -4
  45. package/dist/default-collection-schema.js.map +1 -1
  46. package/dist/default-workflow.d.ts +2 -0
  47. package/dist/default-workflow.d.ts.map +1 -1
  48. package/dist/default-workflow.js +7 -0
  49. package/dist/default-workflow.js.map +1 -1
  50. package/dist/env-watcher.d.ts +23 -0
  51. package/dist/env-watcher.d.ts.map +1 -0
  52. package/dist/env-watcher.js +73 -0
  53. package/dist/env-watcher.js.map +1 -0
  54. package/dist/install-tui.d.ts +3 -0
  55. package/dist/install-tui.d.ts.map +1 -1
  56. package/dist/install-tui.js +24 -8
  57. package/dist/install-tui.js.map +1 -1
  58. package/dist/installer-assets/skill/REFERENCE-cloud.md +21 -0
  59. package/dist/installer-assets/skill/REFERENCE-local.md +51 -0
  60. package/dist/installer-assets/skill/SKILL-cloud.md +58 -0
  61. package/dist/installer-assets/skill/SKILL-local.md +167 -0
  62. package/dist/kind-templates.js +1 -1
  63. package/dist/kind-templates.js.map +1 -1
  64. package/dist/local-store/index.d.ts +3 -0
  65. package/dist/local-store/index.d.ts.map +1 -0
  66. package/dist/local-store/index.js +3 -0
  67. package/dist/local-store/index.js.map +1 -0
  68. package/dist/local-store/schema.d.ts +7 -0
  69. package/dist/local-store/schema.d.ts.map +1 -0
  70. package/dist/local-store/schema.js +88 -0
  71. package/dist/local-store/schema.js.map +1 -0
  72. package/dist/local-store/store.d.ts +55 -0
  73. package/dist/local-store/store.d.ts.map +1 -0
  74. package/dist/local-store/store.js +438 -0
  75. package/dist/local-store/store.js.map +1 -0
  76. package/dist/mcp.d.ts.map +1 -1
  77. package/dist/mcp.js +120 -21
  78. package/dist/mcp.js.map +1 -1
  79. package/dist/models.d.ts +4 -64
  80. package/dist/models.d.ts.map +1 -1
  81. package/dist/models.js +2 -12
  82. package/dist/models.js.map +1 -1
  83. package/dist/onboarding-url.d.ts +8 -0
  84. package/dist/onboarding-url.d.ts.map +1 -0
  85. package/dist/onboarding-url.js +26 -0
  86. package/dist/onboarding-url.js.map +1 -0
  87. package/dist/payload-parse.d.ts +12 -0
  88. package/dist/payload-parse.d.ts.map +1 -0
  89. package/dist/payload-parse.js +34 -0
  90. package/dist/payload-parse.js.map +1 -0
  91. package/dist/run-engine.d.ts +7 -27
  92. package/dist/run-engine.d.ts.map +1 -1
  93. package/dist/run-engine.js +40 -117
  94. package/dist/run-engine.js.map +1 -1
  95. package/dist/skills-version.d.ts +6 -5
  96. package/dist/skills-version.d.ts.map +1 -1
  97. package/dist/skills-version.js +23 -26
  98. package/dist/skills-version.js.map +1 -1
  99. package/dist/skills.d.ts +10 -1
  100. package/dist/skills.d.ts.map +1 -1
  101. package/dist/skills.js +119 -41
  102. package/dist/skills.js.map +1 -1
  103. package/dist/studio/assets/{index-BJSEUqEH.js → index-CHc9YG3r.js} +1 -1
  104. package/dist/studio/assets/{index.es-BYKVIz37.js → index.es-BY7s66E3.js} +1 -1
  105. package/dist/studio/assets/{jspdf.es.min-BPxgpjpS.js → jspdf.es.min-Ctp5RK7Z.js} +3 -3
  106. package/dist/studio/index.html +1 -1
  107. package/dist/studio-server.d.ts.map +1 -1
  108. package/dist/studio-server.js +9 -32
  109. package/dist/studio-server.js.map +1 -1
  110. package/dist/traceability-schema.d.ts +2 -13
  111. package/dist/traceability-schema.d.ts.map +1 -1
  112. package/dist/traceability-schema.js +2 -84
  113. package/dist/traceability-schema.js.map +1 -1
  114. package/dist/validate-collection.d.ts +2 -13
  115. package/dist/validate-collection.d.ts.map +1 -1
  116. package/dist/validate-collection.js +2 -64
  117. package/dist/validate-collection.js.map +1 -1
  118. package/dist/validate.d.ts +2 -9
  119. package/dist/validate.d.ts.map +1 -1
  120. package/dist/validate.js +2 -136
  121. package/dist/validate.js.map +1 -1
  122. package/dist/workflow-template-apply.d.ts +18 -0
  123. package/dist/workflow-template-apply.d.ts.map +1 -1
  124. package/dist/workflow-template-apply.js +42 -1
  125. package/dist/workflow-template-apply.js.map +1 -1
  126. package/dist/workspace.d.ts +28 -5
  127. package/dist/workspace.d.ts.map +1 -1
  128. package/dist/workspace.js +234 -295
  129. package/dist/workspace.js.map +1 -1
  130. package/package.json +12 -4
  131. package/dist/openclaw-plugin/dist/index.js +0 -36
  132. package/dist/openclaw-plugin/openclaw.plugin.json +0 -16
  133. package/dist/openclaw-plugin/package.json +0 -30
  134. package/dist/openclaw-setup.d.ts +0 -23
  135. package/dist/openclaw-setup.d.ts.map +0 -1
  136. package/dist/openclaw-setup.js +0 -158
  137. package/dist/openclaw-setup.js.map +0 -1
  138. package/dist/studio/assets/index-B0cQRTnl.css +0 -1
  139. package/dist/studio/assets/index-B5KJJfe-.js +0 -112
  140. package/dist/studio/assets/index-BAI3RbeB.js +0 -112
  141. package/dist/studio/assets/index-BWxEObno.js +0 -112
  142. package/dist/studio/assets/index-BqodxcBq.css +0 -1
  143. package/dist/studio/assets/index-ByCxy9ye.css +0 -1
  144. package/dist/studio/assets/index-C0TEN9Ry.js +0 -112
  145. package/dist/studio/assets/index-C1vOSCji.js +0 -96
  146. package/dist/studio/assets/index-CrZyoDN6.js +0 -112
  147. package/dist/studio/assets/index-CuXSMCuN.js +0 -112
  148. package/dist/studio/assets/index-DCYfep_s.css +0 -1
  149. package/dist/studio/assets/index-DPgyvzjJ.css +0 -1
  150. package/dist/studio/assets/index-DkTc3mWA.js +0 -112
  151. package/dist/studio/assets/index-DupFoKGU.js +0 -103
  152. package/dist/studio/assets/index-H8V6GOKj.js +0 -112
  153. package/dist/studio/assets/index-a_MnphTB.js +0 -112
  154. package/dist/studio/assets/index-qcwtSA-4.js +0 -112
  155. package/dist/studio/assets/index.es-4NgCdmoS.js +0 -5
  156. package/dist/studio/assets/index.es-BvBHr4E2.js +0 -5
  157. package/dist/studio/assets/index.es-C3xUuN8n.js +0 -5
  158. package/dist/studio/assets/index.es-CMPZ_sSk.js +0 -5
  159. package/dist/studio/assets/index.es-Cj8qyS62.js +0 -5
  160. package/dist/studio/assets/index.es-DFctstzB.js +0 -5
  161. package/dist/studio/assets/index.es-DZbflNuy.js +0 -5
  162. package/dist/studio/assets/index.es-Dlh2y3DK.js +0 -5
  163. package/dist/studio/assets/index.es-DqnHGjD9.js +0 -5
  164. package/dist/studio/assets/index.es-MhPQXbS-.js +0 -5
  165. package/dist/studio/assets/index.es-YKP3CBOK.js +0 -5
  166. package/dist/studio/assets/index.es-kx3v00jK.js +0 -5
  167. package/dist/studio/assets/jspdf.es.min-A3WltiL_.js +0 -79
  168. package/dist/studio/assets/jspdf.es.min-B4Um5PJg.js +0 -79
  169. package/dist/studio/assets/jspdf.es.min-B6z4NApC.js +0 -79
  170. package/dist/studio/assets/jspdf.es.min-BCL8CMTU.js +0 -79
  171. package/dist/studio/assets/jspdf.es.min-BFjarqu2.js +0 -79
  172. package/dist/studio/assets/jspdf.es.min-BWHAGkT1.js +0 -79
  173. package/dist/studio/assets/jspdf.es.min-BmCTm5pp.js +0 -79
  174. package/dist/studio/assets/jspdf.es.min-CE5b-FUc.js +0 -79
  175. package/dist/studio/assets/jspdf.es.min-CX8eNOph.js +0 -79
  176. package/dist/studio/assets/jspdf.es.min-Ck53hztk.js +0 -79
  177. package/dist/studio/assets/jspdf.es.min-DD_iNt2_.js +0 -79
  178. package/dist/studio/assets/jspdf.es.min-DfT8Gv9y.js +0 -79
  179. package/dist/studio/assets/purify.es-C0_7NiBM.js +0 -2
  180. package/dist/version-check.d.ts +0 -61
  181. package/dist/version-check.d.ts.map +0 -1
  182. package/dist/version-check.js +0 -174
  183. package/dist/version-check.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ export interface LoginFlowResult {
2
+ code?: string;
3
+ error?: string;
4
+ }
5
+ /**
6
+ * Start a temporary HTTP server, open the browser to the app's CLI auth page,
7
+ * and resolve when the user completes the flow (code or error).
8
+ */
9
+ export declare function runLoginFlow(options: {
10
+ appUrl: string;
11
+ timeoutMs?: number;
12
+ }): Promise<LoginFlowResult>;
13
+ //# sourceMappingURL=auth-login-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-login-server.d.ts","sourceRoot":"","sources":["../src/auth-login-server.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+D3B"}
@@ -0,0 +1,80 @@
1
+ import http from "node:http";
2
+ import open from "open";
3
+ const SUCCESS_HTML = `
4
+ <!DOCTYPE html>
5
+ <html><head><meta charset="utf-8"><title>Cognetivy CLI</title></head>
6
+ <body style="font-family:system-ui;max-width:480px;margin:3rem auto;text-align:center;">
7
+ <h1>Logged in</h1>
8
+ <p>You can close this window and return to the terminal.</p>
9
+ </body></html>
10
+ `;
11
+ const DENIED_HTML = `
12
+ <!DOCTYPE html>
13
+ <html><head><meta charset="utf-8"><title>Cognetivy CLI</title></head>
14
+ <body style="font-family:system-ui;max-width:480px;margin:3rem auto;text-align:center;">
15
+ <h1>Authorization denied</h1>
16
+ <p>You can close this window.</p>
17
+ </body></html>
18
+ `;
19
+ /**
20
+ * Start a temporary HTTP server, open the browser to the app's CLI auth page,
21
+ * and resolve when the user completes the flow (code or error).
22
+ */
23
+ export function runLoginFlow(options) {
24
+ const { appUrl, timeoutMs = 5 * 60 * 1000 } = options;
25
+ const baseUrl = appUrl.replace(/\/$/, "");
26
+ return new Promise((resolve) => {
27
+ const server = http.createServer((req, res) => {
28
+ const url = req.url ?? "/";
29
+ const parsed = new URL(url, `http://127.0.0.1`);
30
+ const code = parsed.searchParams.get("code");
31
+ const error = parsed.searchParams.get("error");
32
+ const sendHtml = (html, status = 200) => {
33
+ res.writeHead(status, { "Content-Type": "text/html; charset=utf-8" });
34
+ res.end(html);
35
+ };
36
+ if (parsed.pathname === "/callback" || parsed.pathname === "/callback/") {
37
+ server.close();
38
+ if (code) {
39
+ sendHtml(SUCCESS_HTML);
40
+ resolve({ code });
41
+ }
42
+ else if (error) {
43
+ sendHtml(DENIED_HTML);
44
+ resolve({ error: error === "denied" ? "Authorization denied" : error });
45
+ }
46
+ else {
47
+ sendHtml("<body>Missing code or error. Close this window.</body>", 400);
48
+ resolve({ error: "Missing code or error in callback" });
49
+ }
50
+ return;
51
+ }
52
+ sendHtml("<body>Not found. Use the CLI auth flow.</body>", 404);
53
+ });
54
+ server.listen(0, "127.0.0.1", () => {
55
+ const addr = server.address();
56
+ if (!addr || typeof addr === "string") {
57
+ server.close();
58
+ resolve({ error: "Could not bind callback server" });
59
+ return;
60
+ }
61
+ const port = addr.port;
62
+ const redirectUri = `http://127.0.0.1:${port}/callback`;
63
+ const authUrl = `${baseUrl}/cli-auth?redirect_uri=${encodeURIComponent(redirectUri)}`;
64
+ const timeout = setTimeout(() => {
65
+ server.close();
66
+ resolve({ error: "Login timed out. Please try again." });
67
+ }, timeoutMs);
68
+ server.on("close", () => clearTimeout(timeout));
69
+ open(authUrl).catch(() => {
70
+ console.error("Could not open browser. Visit this URL to authorize:");
71
+ console.error(authUrl);
72
+ });
73
+ });
74
+ server.on("error", (err) => {
75
+ server.close();
76
+ resolve({ error: err.message ?? "Server error" });
77
+ });
78
+ });
79
+ }
80
+ //# sourceMappingURL=auth-login-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-login-server.js","sourceRoot":"","sources":["../src/auth-login-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * POC: Build CLI spec from Commander and open a local HTML docs page in the browser.
3
+ */
4
+ import type { Command } from "commander";
5
+ export interface CliOptionSpec {
6
+ term: string;
7
+ description: string;
8
+ }
9
+ export interface CliCommandSpec {
10
+ name: string;
11
+ description: string;
12
+ options: CliOptionSpec[];
13
+ commands: CliCommandSpec[];
14
+ }
15
+ export interface CliSpec {
16
+ name: string;
17
+ description: string;
18
+ version: string;
19
+ /** What happens when running the CLI with no subcommand (e.g. just `cognetivy`). */
20
+ defaultBehavior?: string;
21
+ options: CliOptionSpec[];
22
+ commands: CliCommandSpec[];
23
+ }
24
+ export declare function buildCliSpec(root: Command): CliSpec;
25
+ export declare function generateDocsHtml(spec: CliSpec): string;
26
+ export interface OpenCliDocsOptions {
27
+ /** What happens when running the CLI with no subcommand. Shown as "Default behavior" in the docs. */
28
+ defaultBehavior?: string;
29
+ }
30
+ export declare function openCliDocsInBrowser(root: Command, options?: OpenCliDocsOptions): Promise<void>;
31
+ //# sourceMappingURL=cli-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-docs.d.ts","sourceRoot":"","sources":["../src/cli-docs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAkBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAgBnD;AAqDD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAkJtD;AAED,MAAM,WAAW,kBAAkB;IACjC,qGAAqG;IACrG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrG"}
@@ -0,0 +1,239 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ import open from "open";
5
+ function buildCommandSpec(cmd, helper) {
6
+ const visibleOptions = helper.visibleOptions(cmd);
7
+ const visibleCommands = helper.visibleCommands(cmd);
8
+ return {
9
+ name: cmd.name(),
10
+ description: cmd.description(),
11
+ options: visibleOptions.map((opt) => ({
12
+ term: helper.optionTerm(opt),
13
+ description: helper.optionDescription(opt),
14
+ })),
15
+ commands: visibleCommands
16
+ .filter((c) => c.name() !== "help")
17
+ .map((c) => buildCommandSpec(c, helper)),
18
+ };
19
+ }
20
+ export function buildCliSpec(root) {
21
+ const helper = root.createHelp();
22
+ const visibleOptions = helper.visibleOptions(root);
23
+ const visibleCommands = helper.visibleCommands(root);
24
+ return {
25
+ name: root.name(),
26
+ description: root.description(),
27
+ version: root.version?.() ?? "",
28
+ options: visibleOptions.map((opt) => ({
29
+ term: helper.optionTerm(opt),
30
+ description: helper.optionDescription(opt),
31
+ })),
32
+ commands: visibleCommands
33
+ .filter((c) => c.name() !== "help")
34
+ .map((c) => buildCommandSpec(c, helper)),
35
+ };
36
+ }
37
+ function renderCommand(spec, prefix, depth) {
38
+ const fullName = prefix ? `${prefix} ${spec.name}` : spec.name;
39
+ const hasContent = spec.options.length > 0 || spec.commands.length > 0;
40
+ const optionsHtml = spec.options.length > 0
41
+ ? `
42
+ <div class="options-block">
43
+ <div class="options-label">Options</div>
44
+ <table class="options-table">
45
+ <thead><tr><th>Option</th><th>Description</th></tr></thead>
46
+ <tbody>
47
+ ${spec.options.map((o) => `<tr><td><span class="option-term">${escapeHtml(o.term)}</span></td><td>${escapeHtml(o.description)}</td></tr>`).join("")}
48
+ </tbody>
49
+ </table>
50
+ </div>`
51
+ : "";
52
+ const subcommandsHtml = spec.commands.length > 0
53
+ ? `
54
+ <div class="subcommands-block">
55
+ <div class="subcommands-label">Subcommands</div>
56
+ <div class="subcommands-list">
57
+ ${spec.commands.map((c) => renderCommand(c, fullName, depth + 1)).join("")}
58
+ </div>
59
+ </div>`
60
+ : "";
61
+ const bodyHtml = hasContent ? optionsHtml + subcommandsHtml : `<p class="description-only">${escapeHtml(spec.description)}</p>`;
62
+ return `
63
+ <details class="command-card" data-command="${escapeAttr(fullName)}" data-depth="${depth}" ${depth === 0 ? "open" : ""}>
64
+ <summary class="command-summary">
65
+ <span class="command-name">${escapeHtml(fullName)}</span>
66
+ <span class="command-desc">${escapeHtml(spec.description)}</span>
67
+ </summary>
68
+ <div class="command-body">
69
+ ${bodyHtml}
70
+ </div>
71
+ </details>`;
72
+ }
73
+ function escapeHtml(s) {
74
+ return s
75
+ .replace(/&/g, "&amp;")
76
+ .replace(/</g, "&lt;")
77
+ .replace(/>/g, "&gt;")
78
+ .replace(/"/g, "&quot;");
79
+ }
80
+ function escapeAttr(s) {
81
+ return escapeHtml(s);
82
+ }
83
+ export function generateDocsHtml(spec) {
84
+ const globalOptionsHtml = spec.options.length > 0
85
+ ? `
86
+ <details class="global-options-card" open>
87
+ <summary class="card-summary">
88
+ <span class="card-title">Global options</span>
89
+ </summary>
90
+ <div class="card-body">
91
+ <table class="options-table">
92
+ <thead><tr><th>Option</th><th>Description</th></tr></thead>
93
+ <tbody>
94
+ ${spec.options.map((o) => `<tr><td><span class="option-term">${escapeHtml(o.term)}</span></td><td>${escapeHtml(o.description)}</td></tr>`).join("")}
95
+ </tbody>
96
+ </table>
97
+ </div>
98
+ </details>`
99
+ : "";
100
+ const commandsHtml = spec.commands.map((c) => renderCommand(c, spec.name, 0)).join("");
101
+ return `<!DOCTYPE html>
102
+ <html lang="en">
103
+ <head>
104
+ <meta charset="UTF-8">
105
+ <meta name="viewport" content="width=device-width, initial-scale=1">
106
+ <title>${escapeHtml(spec.name)} CLI reference</title>
107
+ <style>
108
+ :root {
109
+ --header-bg: #1e293b;
110
+ --header-text: #f1f5f9;
111
+ --accent: #0d9488;
112
+ --accent-hover: #0f766e;
113
+ --card-border: #e2e8f0;
114
+ --card-bg: #ffffff;
115
+ --body-bg: #f1f5f9;
116
+ --text: #334155;
117
+ --text-muted: #64748b;
118
+ --option-bg: #f0fdfa;
119
+ --option-border: #99f6e4;
120
+ }
121
+ * { box-sizing: border-box; }
122
+ body { font-family: ui-sans-serif, system-ui, -apple-system, sans-serif; margin: 0; min-height: 100vh; background: var(--body-bg); color: var(--text); line-height: 1.6; }
123
+ .topbar {
124
+ background: var(--header-bg); color: var(--header-text); padding: 1rem 1.5rem; margin-bottom: 0;
125
+ box-shadow: 0 1px 3px rgba(0,0,0,0.12);
126
+ }
127
+ .topbar h1 { margin: 0; font-size: 1.5rem; font-weight: 700; }
128
+ .topbar .version { margin: 0.25rem 0 0; font-size: 0.875rem; opacity: 0.85; }
129
+ .topbar .tagline { margin: 0.5rem 0 0; font-size: 0.9rem; opacity: 0.9; max-width: 42rem; }
130
+ .main { max-width: 920px; margin: 0 auto; padding: 1.5rem; }
131
+ .section-title { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); margin: 1.5rem 0 0.75rem; }
132
+ .section-title:first-of-type { margin-top: 0; }
133
+ .section-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem; margin: 1.5rem 0 0.75rem; }
134
+ .section-header:first-of-type { margin-top: 0; }
135
+ .section-header .section-title { margin: 0; }
136
+ details { display: block; margin-bottom: 0.5rem; }
137
+ .command-card, .global-options-card {
138
+ background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 8px;
139
+ overflow: hidden; box-shadow: 0 1px 2px rgba(0,0,0,0.04);
140
+ }
141
+ .command-card[data-depth="0"] { border-left: 4px solid var(--accent); }
142
+ .command-card[data-depth="1"] { border-left: 4px solid #38bdf8; margin-left: 0.5rem; }
143
+ .command-card[data-depth="2"] { border-left: 4px solid #a78bfa; margin-left: 1rem; }
144
+ .command-summary, .card-summary {
145
+ list-style: none; cursor: pointer; padding: 0.75rem 1rem; display: flex; align-items: center; gap: 0.75rem;
146
+ flex-wrap: wrap; user-select: none;
147
+ }
148
+ .command-summary::-webkit-details-marker, .card-summary::-webkit-details-marker { display: none; }
149
+ .command-summary::before, .card-summary::before {
150
+ content: ''; display: inline-block; width: 0; height: 0;
151
+ border-left: 5px solid var(--text-muted); border-top: 4px solid transparent; border-bottom: 4px solid transparent;
152
+ margin-right: 0.5rem; transition: transform 0.2s;
153
+ }
154
+ details[open] > .command-summary::before, details[open] > .card-summary::before { transform: rotate(90deg); }
155
+ .command-summary:hover, .card-summary:hover { background: #f8fafc; }
156
+ .command-name { font-weight: 600; color: var(--accent); font-family: ui-monospace, monospace; font-size: 0.95rem; }
157
+ .command-desc { color: var(--text-muted); font-size: 0.875rem; }
158
+ .card-title { font-weight: 600; color: var(--text); }
159
+ .command-body, .card-body { padding: 0 1rem 1rem; border-top: 1px solid var(--card-border); }
160
+ .options-block, .subcommands-block { margin-top: 1rem; }
161
+ .options-block:first-child, .subcommands-block:first-child { margin-top: 0.75rem; }
162
+ .options-label, .subcommands-label {
163
+ font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted);
164
+ margin-bottom: 0.5rem;
165
+ }
166
+ .options-table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
167
+ .options-table th, .options-table td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--card-border); vertical-align: top; }
168
+ .options-table th { color: var(--text-muted); font-weight: 600; }
169
+ .options-table tbody tr:hover { background: #f8fafc; }
170
+ .option-term {
171
+ display: inline-block; background: var(--option-bg); color: #0f766e; padding: 0.2em 0.5em;
172
+ border-radius: 4px; font-family: ui-monospace, monospace; font-size: 0.85em; border: 1px solid var(--option-border);
173
+ }
174
+ .subcommands-list { margin-top: 0.5rem; }
175
+ .description-only { margin: 0; color: var(--text-muted); font-size: 0.875rem; }
176
+ .footer { margin-top: 2rem; padding-top: 1rem; border-top: 1px solid var(--card-border); font-size: 0.8rem; color: var(--text-muted); }
177
+ .footer code { background: #e2e8f0; padding: 0.15em 0.35em; border-radius: 4px; font-size: 0.85em; }
178
+ .expand-actions { margin-top: 1rem; display: flex; gap: 0.5rem; }
179
+ .btn { cursor: pointer; padding: 0.4rem 0.75rem; border-radius: 6px; font-size: 0.8rem; font-weight: 500; border: 1px solid var(--card-border); background: var(--card-bg); color: var(--text); }
180
+ .btn:hover { background: #e2e8f0; }
181
+ .btn-sm { padding: 0.3rem 0.6rem; font-size: 0.75rem; }
182
+ .default-behavior-card {
183
+ background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 8px;
184
+ padding: 1rem 1.25rem; margin-bottom: 0.5rem; border-left: 4px solid var(--accent);
185
+ }
186
+ .default-behavior-desc { margin: 0 0 0.75rem; color: var(--text); }
187
+ .default-behavior-usage { margin: 0 0 0.25rem; font-size: 0.8rem; color: var(--text-muted); }
188
+ .default-behavior-cmd { display: inline-block; background: var(--option-bg); color: #0f766e; padding: 0.35em 0.6em; border-radius: 4px; font-size: 0.95rem; border: 1px solid var(--option-border); }
189
+ </style>
190
+ </head>
191
+ <body>
192
+ <header class="topbar">
193
+ <h1>${escapeHtml(spec.name)}</h1>
194
+ ${spec.version ? `<p class="version">Version ${escapeHtml(spec.version)}</p>` : ""}
195
+ <p class="tagline">${escapeHtml(spec.description)}</p>
196
+ </header>
197
+ <main class="main">
198
+ ${spec.defaultBehavior ? `
199
+ <div class="section-title">Default behavior</div>
200
+ <div class="default-behavior-card">
201
+ <p class="default-behavior-desc">${escapeHtml(spec.defaultBehavior)}</p>
202
+ <p class="default-behavior-usage">Run with no arguments:</p>
203
+ <code class="default-behavior-cmd">${escapeHtml(spec.name)}</code>
204
+ </div>
205
+ ` : ""}
206
+ ${spec.options.length > 0 ? `<div class="section-title">Global</div>${globalOptionsHtml}` : ""}
207
+ <div class="section-header">
208
+ <span class="section-title">Commands</span>
209
+ <div class="expand-actions">
210
+ <button type="button" class="btn btn-sm" id="expand-all">Expand all</button>
211
+ <button type="button" class="btn btn-sm" id="collapse-all">Collapse all</button>
212
+ </div>
213
+ </div>
214
+ ${commandsHtml}
215
+ <p class="footer">Generated from CLI. Use <code>${escapeHtml(spec.name)} --help</code> in the terminal for quick help.</p>
216
+ </main>
217
+ <script>
218
+ (function() {
219
+ var cards = document.querySelectorAll('.command-card, .global-options-card');
220
+ document.getElementById('expand-all').onclick = function() { cards.forEach(function(d) { d.open = true; }); };
221
+ document.getElementById('collapse-all').onclick = function() { cards.forEach(function(d) { d.open = false; }); };
222
+ })();
223
+ </script>
224
+ </body>
225
+ </html>`;
226
+ }
227
+ export async function openCliDocsInBrowser(root, options) {
228
+ const spec = buildCliSpec(root);
229
+ if (options?.defaultBehavior) {
230
+ spec.defaultBehavior = options.defaultBehavior;
231
+ }
232
+ const html = generateDocsHtml(spec);
233
+ const tmpDir = os.tmpdir();
234
+ const tmpPath = path.join(tmpDir, "cognetivy-cli-docs.html");
235
+ await fs.writeFile(tmpPath, html, "utf-8");
236
+ await open(tmpPath);
237
+ console.log(`Opened CLI reference at ${tmpPath}`);
238
+ }
239
+ //# sourceMappingURL=cli-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-docs.js","sourceRoot":"","sources":["../src/cli-docs.ts"],"names":[],"mappings":"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"}