decocms 0.16.0

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 (111) hide show
  1. package/README.md +95 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +373 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/add/add.d.ts +7 -0
  7. package/dist/commands/add/add.d.ts.map +1 -0
  8. package/dist/commands/add/add.js +90 -0
  9. package/dist/commands/add/add.js.map +1 -0
  10. package/dist/commands/auth/login.d.ts +2 -0
  11. package/dist/commands/auth/login.d.ts.map +1 -0
  12. package/dist/commands/auth/login.js +125 -0
  13. package/dist/commands/auth/login.js.map +1 -0
  14. package/dist/commands/auth/whoami.d.ts +2 -0
  15. package/dist/commands/auth/whoami.d.ts.map +1 -0
  16. package/dist/commands/auth/whoami.js +51 -0
  17. package/dist/commands/auth/whoami.js.map +1 -0
  18. package/dist/commands/config/configure.d.ts +2 -0
  19. package/dist/commands/config/configure.d.ts.map +1 -0
  20. package/dist/commands/config/configure.js +51 -0
  21. package/dist/commands/config/configure.js.map +1 -0
  22. package/dist/commands/create/create.d.ts +3 -0
  23. package/dist/commands/create/create.d.ts.map +1 -0
  24. package/dist/commands/create/create.js +238 -0
  25. package/dist/commands/create/create.js.map +1 -0
  26. package/dist/commands/dev/dev.d.ts +8 -0
  27. package/dist/commands/dev/dev.d.ts.map +1 -0
  28. package/dist/commands/dev/dev.js +64 -0
  29. package/dist/commands/dev/dev.js.map +1 -0
  30. package/dist/commands/dev/link.d.ts +8 -0
  31. package/dist/commands/dev/link.d.ts.map +1 -0
  32. package/dist/commands/dev/link.js +124 -0
  33. package/dist/commands/dev/link.js.map +1 -0
  34. package/dist/commands/gen/gen.d.ts +11 -0
  35. package/dist/commands/gen/gen.d.ts.map +1 -0
  36. package/dist/commands/gen/gen.js +341 -0
  37. package/dist/commands/gen/gen.js.map +1 -0
  38. package/dist/commands/hosting/deploy.d.ts +19 -0
  39. package/dist/commands/hosting/deploy.d.ts.map +1 -0
  40. package/dist/commands/hosting/deploy.js +194 -0
  41. package/dist/commands/hosting/deploy.js.map +1 -0
  42. package/dist/commands/hosting/list.d.ts +6 -0
  43. package/dist/commands/hosting/list.d.ts.map +1 -0
  44. package/dist/commands/hosting/list.js +26 -0
  45. package/dist/commands/hosting/list.js.map +1 -0
  46. package/dist/commands/hosting/promote.d.ts +11 -0
  47. package/dist/commands/hosting/promote.d.ts.map +1 -0
  48. package/dist/commands/hosting/promote.js +153 -0
  49. package/dist/commands/hosting/promote.js.map +1 -0
  50. package/dist/commands/update/update.d.ts +4 -0
  51. package/dist/commands/update/update.d.ts.map +1 -0
  52. package/dist/commands/update/update.js +242 -0
  53. package/dist/commands/update/update.js.map +1 -0
  54. package/dist/commands/update/upgrade.d.ts +4 -0
  55. package/dist/commands/update/upgrade.d.ts.map +1 -0
  56. package/dist/commands/update/upgrade.js +157 -0
  57. package/dist/commands/update/upgrade.js.map +1 -0
  58. package/dist/lib/config.d.ts +309 -0
  59. package/dist/lib/config.d.ts.map +1 -0
  60. package/dist/lib/config.js +262 -0
  61. package/dist/lib/config.js.map +1 -0
  62. package/dist/lib/constants.d.ts +10 -0
  63. package/dist/lib/constants.d.ts.map +1 -0
  64. package/dist/lib/constants.js +16 -0
  65. package/dist/lib/constants.js.map +1 -0
  66. package/dist/lib/fs.d.ts +40 -0
  67. package/dist/lib/fs.d.ts.map +1 -0
  68. package/dist/lib/fs.js +162 -0
  69. package/dist/lib/fs.js.map +1 -0
  70. package/dist/lib/mcp.d.ts +34 -0
  71. package/dist/lib/mcp.d.ts.map +1 -0
  72. package/dist/lib/mcp.js +19 -0
  73. package/dist/lib/mcp.js.map +1 -0
  74. package/dist/lib/parse-binding-tool.d.ts +12 -0
  75. package/dist/lib/parse-binding-tool.d.ts.map +1 -0
  76. package/dist/lib/parse-binding-tool.js +15 -0
  77. package/dist/lib/parse-binding-tool.js.map +1 -0
  78. package/dist/lib/prompt-ide-setup.d.ts +27 -0
  79. package/dist/lib/prompt-ide-setup.d.ts.map +1 -0
  80. package/dist/lib/prompt-ide-setup.js +158 -0
  81. package/dist/lib/prompt-ide-setup.js.map +1 -0
  82. package/dist/lib/prompt-integrations.d.ts +7 -0
  83. package/dist/lib/prompt-integrations.d.ts.map +1 -0
  84. package/dist/lib/prompt-integrations.js +84 -0
  85. package/dist/lib/prompt-integrations.js.map +1 -0
  86. package/dist/lib/prompt-workspace.d.ts +2 -0
  87. package/dist/lib/prompt-workspace.d.ts.map +1 -0
  88. package/dist/lib/prompt-workspace.js +93 -0
  89. package/dist/lib/prompt-workspace.js.map +1 -0
  90. package/dist/lib/runtime.d.ts +5 -0
  91. package/dist/lib/runtime.d.ts.map +1 -0
  92. package/dist/lib/runtime.js +15 -0
  93. package/dist/lib/runtime.js.map +1 -0
  94. package/dist/lib/session.d.ts +39 -0
  95. package/dist/lib/session.d.ts.map +1 -0
  96. package/dist/lib/session.js +124 -0
  97. package/dist/lib/session.js.map +1 -0
  98. package/dist/lib/slugify.d.ts +13 -0
  99. package/dist/lib/slugify.d.ts.map +1 -0
  100. package/dist/lib/slugify.js +27 -0
  101. package/dist/lib/slugify.js.map +1 -0
  102. package/dist/lib/supabase.d.ts +5 -0
  103. package/dist/lib/supabase.d.ts.map +1 -0
  104. package/dist/lib/supabase.js +19 -0
  105. package/dist/lib/supabase.js.map +1 -0
  106. package/dist/lib/wrangler.d.ts +9 -0
  107. package/dist/lib/wrangler.d.ts.map +1 -0
  108. package/dist/lib/wrangler.js +118 -0
  109. package/dist/lib/wrangler.js.map +1 -0
  110. package/dist/rules/deco-chat.mdc +902 -0
  111. package/package.json +79 -0
package/dist/lib/fs.js ADDED
@@ -0,0 +1,162 @@
1
+ import { promises as fs } from "fs";
2
+ import { dirname, join, relative } from "path";
3
+ import { createReadStream, createWriteStream } from "fs";
4
+ import { pipeline } from "stream/promises";
5
+ /**
6
+ * Ensure that a directory exists, creating it if necessary (recursive)
7
+ * Node.js equivalent of Deno's ensureDir
8
+ */
9
+ export async function ensureDir(dirPath) {
10
+ try {
11
+ await fs.mkdir(dirPath, { recursive: true });
12
+ }
13
+ catch (error) {
14
+ // If directory already exists, that's fine
15
+ if (error.code !== "EEXIST") {
16
+ throw error;
17
+ }
18
+ }
19
+ }
20
+ /**
21
+ * Copy a file from source to destination, creating directories as needed
22
+ */
23
+ async function copyFile(src, dest) {
24
+ await ensureDir(dirname(dest));
25
+ await pipeline(createReadStream(src), createWriteStream(dest));
26
+ }
27
+ /**
28
+ * Copy a directory recursively from source to destination
29
+ */
30
+ async function copyDir(src, dest, options = {}) {
31
+ await ensureDir(dest);
32
+ const entries = await fs.readdir(src, { withFileTypes: true });
33
+ for (const entry of entries) {
34
+ const srcPath = join(src, entry.name);
35
+ const destPath = join(dest, entry.name);
36
+ if (entry.isDirectory()) {
37
+ await copyDir(srcPath, destPath, options);
38
+ }
39
+ else if (entry.isFile()) {
40
+ if (!options.overwrite) {
41
+ try {
42
+ await fs.access(destPath);
43
+ continue; // File exists and overwrite is false, skip
44
+ }
45
+ catch {
46
+ // File doesn't exist, proceed with copy
47
+ }
48
+ }
49
+ await copyFile(srcPath, destPath);
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Copy a file or directory from source to destination
55
+ * Node.js equivalent of Deno's copy
56
+ */
57
+ export async function copy(src, dest, options = {}) {
58
+ const srcStat = await fs.stat(src);
59
+ if (srcStat.isDirectory()) {
60
+ await copyDir(src, dest, options);
61
+ }
62
+ else if (srcStat.isFile()) {
63
+ if (!options.overwrite) {
64
+ try {
65
+ await fs.access(dest);
66
+ return; // File exists and overwrite is false, skip
67
+ }
68
+ catch {
69
+ // File doesn't exist, proceed with copy
70
+ }
71
+ }
72
+ await copyFile(src, dest);
73
+ }
74
+ else {
75
+ throw new Error(`Source ${src} is neither a file nor a directory`);
76
+ }
77
+ }
78
+ /**
79
+ * Recursively walk a directory tree and yield entries
80
+ * Node.js equivalent of Deno's walk
81
+ */
82
+ export async function* walk(root, options = {}) {
83
+ const { maxDepth = Infinity, includeFiles = true, includeDirs = false, followSymlinks = false, exts, match, skip, } = options;
84
+ async function* walkRecursive(dir, depth) {
85
+ if (depth > maxDepth)
86
+ return;
87
+ let entries;
88
+ try {
89
+ entries = await fs.readdir(dir, { withFileTypes: true });
90
+ }
91
+ catch (_error) {
92
+ // Skip directories we can't read
93
+ return;
94
+ }
95
+ for (const entry of entries) {
96
+ const entryPath = join(dir, entry.name);
97
+ const relativePath = relative(root, entryPath);
98
+ let isFile = entry.isFile();
99
+ let isDirectory = entry.isDirectory();
100
+ const isSymlink = entry.isSymbolicLink();
101
+ // Handle symlinks
102
+ if (isSymlink && followSymlinks) {
103
+ try {
104
+ const stat = await fs.stat(entryPath);
105
+ isFile = stat.isFile();
106
+ isDirectory = stat.isDirectory();
107
+ }
108
+ catch {
109
+ continue; // Skip broken symlinks
110
+ }
111
+ }
112
+ else if (isSymlink && !followSymlinks) {
113
+ continue; // Skip symlinks when not following them
114
+ }
115
+ const walkEntry = {
116
+ path: entryPath,
117
+ name: entry.name,
118
+ isFile,
119
+ isDirectory,
120
+ isSymlink,
121
+ };
122
+ // Apply filters
123
+ if (skip && skip.some((pattern) => pattern.test(relativePath))) {
124
+ continue;
125
+ }
126
+ if (match && !match.some((pattern) => pattern.test(relativePath))) {
127
+ continue;
128
+ }
129
+ if (exts && isFile) {
130
+ const ext = entryPath.substring(entryPath.lastIndexOf(".") + 1);
131
+ if (!exts.includes(ext)) {
132
+ continue;
133
+ }
134
+ }
135
+ // Yield files if requested
136
+ if (isFile && includeFiles) {
137
+ yield walkEntry;
138
+ }
139
+ // Yield directories if requested
140
+ if (isDirectory && includeDirs) {
141
+ yield walkEntry;
142
+ }
143
+ // Recurse into directories
144
+ if (isDirectory) {
145
+ yield* walkRecursive(entryPath, depth + 1);
146
+ }
147
+ }
148
+ }
149
+ yield* walkRecursive(root, 0);
150
+ }
151
+ /**
152
+ * Collect all walk entries into an array
153
+ * Convenience function for when you need all entries at once
154
+ */
155
+ export async function walkArray(root, options = {}) {
156
+ const entries = [];
157
+ for await (const entry of walk(root, options)) {
158
+ entries.push(entry);
159
+ }
160
+ return entries;
161
+ }
162
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/lib/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ interface Options {
3
+ workspace?: string;
4
+ local?: boolean;
5
+ }
6
+ export declare const workspaceClientParams: ({ workspace, local }: Options) => Promise<{
7
+ headers: Record<string, string>;
8
+ url: URL;
9
+ }>;
10
+ export declare const createWorkspaceClient: ({ workspace, local }: Options) => Promise<Client<{
11
+ method: string;
12
+ params?: {
13
+ [x: string]: unknown;
14
+ _meta?: {
15
+ [x: string]: unknown;
16
+ progressToken?: string | number | undefined;
17
+ } | undefined;
18
+ } | undefined;
19
+ }, {
20
+ method: string;
21
+ params?: {
22
+ [x: string]: unknown;
23
+ _meta?: {
24
+ [x: string]: unknown;
25
+ } | undefined;
26
+ } | undefined;
27
+ }, {
28
+ [x: string]: unknown;
29
+ _meta?: {
30
+ [x: string]: unknown;
31
+ } | undefined;
32
+ }>>;
33
+ export {};
34
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/lib/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,UAAU,OAAO;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AACD,eAAO,MAAM,qBAAqB,GAAU,sBAAsB,OAAO;;;EAWxE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,sBAAsB,OAAO;;;;;;;;;;;;;;;;;;;;;;GASxE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
3
+ import { DECO_CHAT_API_LOCAL, DECO_CHAT_API_PROD } from "./constants.js";
4
+ import { getRequestAuthHeaders } from "./session.js";
5
+ export const workspaceClientParams = async ({ workspace, local }) => {
6
+ const headers = await getRequestAuthHeaders();
7
+ const api = local ? DECO_CHAT_API_LOCAL : DECO_CHAT_API_PROD;
8
+ const url = new URL(!workspace || workspace.startsWith("/")
9
+ ? `${workspace ?? ""}/mcp`
10
+ : `/shared/${workspace}/mcp`, api);
11
+ return { headers, url };
12
+ };
13
+ export const createWorkspaceClient = async ({ workspace, local }) => {
14
+ const client = new Client({ name: "deco-chat-cli", version: "1.0.0" });
15
+ const { headers, url } = await workspaceClientParams({ workspace, local });
16
+ await client.connect(new StreamableHTTPClientTransport(url, { requestInit: { headers } }));
17
+ return client;
18
+ };
19
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/lib/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAMrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAW,EAAE,EAAE;IAC3E,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAE7D,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QACrC,CAAC,CAAC,GAAG,SAAS,IAAI,EAAE,MAAM;QAC1B,CAAC,CAAC,WAAW,SAAS,MAAM,EAC9B,GAAG,CACJ,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAW,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,qBAAqB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,MAAM,CAAC,OAAO,CAClB,IAAI,6BAA6B,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CACrE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type BindingToolScope = `${string}${typeof SEPARATOR}${string}`;
2
+ export interface BindingTool {
3
+ bindingName: string;
4
+ toolName: string;
5
+ }
6
+ declare const SEPARATOR = "::";
7
+ export declare const parser: {
8
+ fromBindingToolToScope: ({ bindingName, toolName, }: BindingTool) => BindingToolScope;
9
+ fromScopeToBindingTool: (scope: BindingToolScope) => BindingTool;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=parse-binding-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-binding-tool.d.ts","sourceRoot":"","sources":["../../src/lib/parse-binding-tool.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,GAAG,MAAM,GAAG,OAAO,SAAS,GAAG,MAAM,EAAE,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,SAAS,OAAO,CAAC;AACvB,eAAO,MAAM,MAAM;yDAId,WAAW,KAAG,gBAAgB;oCASD,gBAAgB,KAAG,WAAW;CAK/D,CAAC"}
@@ -0,0 +1,15 @@
1
+ const SEPARATOR = "::";
2
+ export const parser = {
3
+ fromBindingToolToScope: ({ bindingName, toolName, }) => {
4
+ const parts = [bindingName, toolName];
5
+ if (parts.some((part) => part.includes(SEPARATOR))) {
6
+ throw new Error(`binding name or tool name includes ${SEPARATOR} is not allowed`);
7
+ }
8
+ return parts.join(SEPARATOR);
9
+ },
10
+ fromScopeToBindingTool: (scope) => {
11
+ const [bindingName, toolName] = scope.split(SEPARATOR);
12
+ return { bindingName, toolName };
13
+ },
14
+ };
15
+ //# sourceMappingURL=parse-binding-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-binding-tool.js","sourceRoot":"","sources":["../../src/lib/parse-binding-tool.ts"],"names":[],"mappings":"AAOA,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,sBAAsB,EAAE,CAAC,EACvB,WAAW,EACX,QAAQ,GACI,EAAoB,EAAE;QAClC,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,iBAAiB,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAqB,CAAC;IACnD,CAAC;IACD,sBAAsB,EAAE,CAAC,KAAuB,EAAe,EAAE;QAC/D,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ type MCPServerConfig = {
2
+ command: string;
3
+ args: string[];
4
+ } | {
5
+ url: string;
6
+ type: "http" | "sse";
7
+ headers?: Record<string, string>;
8
+ };
9
+ export interface MCPConfig {
10
+ mcpServers: Record<string, MCPServerConfig>;
11
+ }
12
+ interface IDEConfig {
13
+ content: string;
14
+ path: string;
15
+ }
16
+ export declare function writeIDEConfig(configs: IDEConfig[]): Promise<void>;
17
+ export declare const hasMCPPreferences: (workspace: string, app: string) => Promise<boolean>;
18
+ export declare const setMCPPreferences: (workspace: string, app: string) => Promise<void>;
19
+ export declare function promptIDESetup(cfg: {
20
+ workspace: string;
21
+ app: string;
22
+ }, projectRoot?: string): Promise<Array<{
23
+ content: string;
24
+ path: string;
25
+ }> | null>;
26
+ export {};
27
+ //# sourceMappingURL=prompt-ide-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-ide-setup.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-ide-setup.ts"],"names":[],"mappings":"AAwBA,KAAK,eAAe,GAChB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEN,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAiFD,wBAAsB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE;AAED,eAAO,MAAM,iBAAiB,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,qBAmBrE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,kBA0BrE,CAAC;AAEF,wBAAsB,cAAc,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CA2C1D"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Prompts the user to make their IDE sentient about the project by installing MCP configurations.
3
+ *
4
+ * This function:
5
+ * 1. Asks the user if they want to make their IDE sentient
6
+ * 2. If yes, prompts them to select their IDE (Cursor, VSCode, or Windsurf)
7
+ * 3. Returns the appropriate MCP configuration and target path for the selected IDE
8
+ *
9
+ * @param mcpConfig - The MCP configuration object
10
+ * @param projectRoot - The root path of the project where the config should be written
11
+ * @returns Promise<{ config: any; targetPath: string } | null> - The MCP config and target path, or null if user declines
12
+ */
13
+ import inquirer from "inquirer";
14
+ import { promises as fs } from "fs";
15
+ import { dirname, join } from "path";
16
+ import { ensureDir } from "./fs.js";
17
+ import { getAppUUID, getMCPConfig, getMCPConfigVersion, getRulesConfig, } from "./config.js";
18
+ import process from "node:process";
19
+ const IDE_SUPPORT = {
20
+ cursor: {
21
+ name: "Cursor",
22
+ createConfig: async (mcpConfig, projectRoot) => {
23
+ const outDir = join(projectRoot, ".cursor");
24
+ const configs = [];
25
+ const configPath = join(outDir, "mcp.json");
26
+ const existingConfig = await fs
27
+ .readFile(configPath, "utf-8")
28
+ .then(JSON.parse)
29
+ .catch(() => ({ mcpServers: {} }));
30
+ const config = {
31
+ mcpServers: {
32
+ ...(existingConfig.mcpServers || {}),
33
+ ...mcpConfig.mcpServers,
34
+ },
35
+ };
36
+ configs.push({
37
+ content: JSON.stringify(config, null, 2),
38
+ path: join(outDir, "mcp.json"),
39
+ });
40
+ const rules = Object.entries(await getRulesConfig());
41
+ for (const [path, content] of rules) {
42
+ configs.push({ content, path: join(outDir, "rules", path) });
43
+ }
44
+ return configs;
45
+ },
46
+ },
47
+ vscode: {
48
+ name: "VS Code",
49
+ createConfig: async (mcpConfig, projectRoot) => {
50
+ const outDir = join(projectRoot, ".vscode");
51
+ const configs = [];
52
+ const configPath = join(outDir, "mcp.json");
53
+ const existingConfig = await fs
54
+ .readFile(configPath, "utf-8")
55
+ .then(JSON.parse)
56
+ .catch(() => ({ mcpServers: {} }));
57
+ const config = {
58
+ mcpServers: {
59
+ ...(existingConfig.mcpServers || {}),
60
+ ...mcpConfig.mcpServers,
61
+ },
62
+ };
63
+ configs.push({
64
+ content: JSON.stringify(config, null, 2),
65
+ path: join(outDir, "mcp.json"),
66
+ });
67
+ const rules = Object.entries(await getRulesConfig());
68
+ for (const [path, content] of rules) {
69
+ configs.push({ content, path: join(outDir, "rules", path) });
70
+ }
71
+ return configs;
72
+ },
73
+ },
74
+ };
75
+ export async function writeIDEConfig(configs) {
76
+ const targetDir = dirname(configs[0]?.path ?? "");
77
+ // Write all configuration files in parallel
78
+ await Promise.all(configs.map(async ({ content, path }) => {
79
+ await ensureDir(dirname(path));
80
+ await fs.writeFile(path, content);
81
+ }));
82
+ console.log(`✅ IDE configuration written to: ${targetDir}`);
83
+ }
84
+ export const hasMCPPreferences = async (workspace, app) => {
85
+ const [appUUID, currentVersion] = await Promise.all([
86
+ getAppUUID(workspace, app),
87
+ getMCPConfigVersion(),
88
+ ]);
89
+ // Use a simple file-based storage instead of localStorage for Node.js
90
+ const prefsPath = join(process.cwd(), ".deco", "preferences.json");
91
+ try {
92
+ const prefs = JSON.parse(await fs.readFile(prefsPath, "utf-8"));
93
+ const storedVersion = prefs[`mcp-install-version-${appUUID}`];
94
+ return storedVersion === currentVersion;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ };
100
+ export const setMCPPreferences = async (workspace, app) => {
101
+ const [appUUID, currentVersion] = await Promise.all([
102
+ getAppUUID(workspace, app),
103
+ getMCPConfigVersion(),
104
+ ]);
105
+ const prefsPath = join(process.cwd(), ".deco", "preferences.json");
106
+ try {
107
+ await ensureDir(dirname(prefsPath));
108
+ let prefs = {};
109
+ try {
110
+ prefs = JSON.parse(await fs.readFile(prefsPath, "utf-8"));
111
+ }
112
+ catch {
113
+ // File doesn't exist, start with empty prefs
114
+ }
115
+ prefs[`mcp-install-version-${appUUID}`] = currentVersion;
116
+ await fs.writeFile(prefsPath, JSON.stringify(prefs, null, 2));
117
+ }
118
+ catch (error) {
119
+ console.warn("Failed to save MCP preferences:", error);
120
+ }
121
+ };
122
+ export async function promptIDESetup(cfg, projectRoot = process.cwd()) {
123
+ await setMCPPreferences(cfg.workspace, cfg.app);
124
+ const mcpConfig = getMCPConfig(cfg.workspace, cfg.app);
125
+ // Ask if user wants to make IDE sentient
126
+ const { wantsSentientIDE } = await inquirer.prompt([
127
+ {
128
+ type: "confirm",
129
+ name: "wantsSentientIDE",
130
+ message: "Would you like to configure your IDE to use this project?",
131
+ default: true,
132
+ },
133
+ ]);
134
+ if (!wantsSentientIDE) {
135
+ return null;
136
+ }
137
+ // Prompt user to select their IDE
138
+ const { selectedIDE } = await inquirer.prompt([
139
+ {
140
+ type: "list",
141
+ name: "selectedIDE",
142
+ message: "Select your preferred IDE:",
143
+ choices: [
144
+ { name: "Cursor", value: "cursor" },
145
+ { name: "VS Code", value: "vscode" },
146
+ { name: "None", value: "none" },
147
+ ],
148
+ },
149
+ ]);
150
+ const ideSupport = IDE_SUPPORT[selectedIDE];
151
+ if (selectedIDE === "none") {
152
+ return null;
153
+ }
154
+ // Create the IDE-specific configuration
155
+ const configs = await ideSupport.createConfig(mcpConfig, projectRoot);
156
+ return configs;
157
+ }
158
+ //# sourceMappingURL=prompt-ide-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-ide-setup.js","sourceRoot":"","sources":["../../src/lib/prompt-ide-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface DecoBinding {
2
+ name: string;
3
+ type: string;
4
+ integration_id: string;
5
+ }
6
+ export declare function promptIntegrations(local?: boolean, workspace?: string): Promise<DecoBinding[]>;
7
+ //# sourceMappingURL=prompt-integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-integrations.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-integrations.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,UAAQ,EACb,SAAS,SAAK,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CA0ExB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Prompts the user to select multiple integrations from the available integrations list.
3
+ *
4
+ * This function:
5
+ * 1. Checks if the user has a valid session
6
+ * 2. Creates a workspace client to access global tools
7
+ * 3. Uses the INTEGRATIONS_LIST tool to fetch available integrations
8
+ * 4. Presents a multiple select prompt to the user with search functionality
9
+ * 5. Returns the selected integration bindings as an array
10
+ *
11
+ * @param local - Whether to use local deco.chat instance
12
+ * @param workspace - The workspace to fetch integrations from
13
+ * @returns Promise<DecoBinding[]> - The selected integration bindings
14
+ * @throws Error if no session is found or no integrations are available
15
+ */
16
+ import inquirer from "inquirer";
17
+ // @ts-ignore - does not have types
18
+ import inquirerSearchCheckbox from "inquirer-search-checkbox";
19
+ import { createWorkspaceClient } from "./mcp.js";
20
+ import { readSession } from "./session.js";
21
+ import { sanitizeConstantName } from "./slugify.js";
22
+ import { z } from "zod";
23
+ // Register the search checkbox plugin
24
+ inquirer.registerPrompt("search-checkbox", inquirerSearchCheckbox);
25
+ export async function promptIntegrations(local = false, workspace = "") {
26
+ // Check if user has a session
27
+ const session = await readSession();
28
+ if (!session) {
29
+ throw new Error("No session found. Please run 'deco login' first.");
30
+ }
31
+ // Create workspace client
32
+ const client = await createWorkspaceClient({ workspace, local });
33
+ try {
34
+ // Use INTEGRATIONS_LIST tool to get available integrations
35
+ const response = await client.callTool({
36
+ name: "INTEGRATIONS_LIST",
37
+ arguments: {},
38
+ },
39
+ // @ts-expect-error We need to refactor INTEGRATIONS_LIST to stop returning array and use a proper object
40
+ z.any());
41
+ if (response.isError) {
42
+ throw new Error("Failed to fetch integrations");
43
+ }
44
+ const integrationsResponse = response.structuredContent?.items;
45
+ const integrations = (integrationsResponse || [])
46
+ .filter((c) => c.connection.type !== "INNATE")
47
+ .sort((a, b) => a.name.localeCompare(b.name));
48
+ if (!integrations || integrations.length === 0) {
49
+ throw new Error("No integrations found.");
50
+ }
51
+ // Create options for the search checkbox component
52
+ const options = integrations.map((integration) => ({
53
+ name: `${integration.name} - ${integration.description}`,
54
+ value: integration.id,
55
+ short: integration.name,
56
+ }));
57
+ // Use inquirer search checkbox to allow multiple selection with search
58
+ const { selectedIntegrationIds } = await inquirer.prompt([
59
+ {
60
+ type: "search-checkbox",
61
+ name: "selectedIntegrationIds",
62
+ message: "Select integrations (use space to select, enter to confirm):",
63
+ choices: options,
64
+ searchable: true,
65
+ highlight: true,
66
+ searchText: "Type to search integrations:",
67
+ emptyText: "No integrations found matching your search.",
68
+ },
69
+ ]);
70
+ // Convert selected IDs back to integration objects
71
+ const selectedIntegrations = integrations.filter((integration) => selectedIntegrationIds.includes(integration.id));
72
+ // Return the selected integration bindings
73
+ return selectedIntegrations.map(({ name, id }) => ({
74
+ name: sanitizeConstantName(name),
75
+ type: "mcp",
76
+ integration_id: id,
77
+ }));
78
+ }
79
+ finally {
80
+ // Clean up the client connection
81
+ await client.close();
82
+ }
83
+ }
84
+ //# sourceMappingURL=prompt-integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-integrations.js","sourceRoot":"","sources":["../../src/lib/prompt-integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function promptWorkspace(local?: boolean, current?: string): Promise<string>;
2
+ //# sourceMappingURL=prompt-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-workspace.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-workspace.ts"],"names":[],"mappings":"AAkCA,wBAAsB,eAAe,CACnC,KAAK,UAAQ,EACb,OAAO,SAAK,GACX,OAAO,CAAC,MAAM,CAAC,CAiFjB"}