@crewx/cli 0.8.0-rc.66 → 0.8.0-rc.82
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.
- package/bin/crewx +2 -0
- package/dist/bootstrap/crewx-cli.d.ts +11 -0
- package/dist/bootstrap/crewx-cli.js +31 -0
- package/dist/builtin.d.ts +15 -0
- package/dist/{cli/builtin.handler.js → builtin.js} +21 -7
- package/dist/commands/agent.d.ts +12 -0
- package/dist/commands/agent.js +246 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.js +190 -0
- package/dist/commands/execute.d.ts +21 -0
- package/dist/commands/execute.js +117 -0
- package/dist/commands/hook/install.d.ts +21 -0
- package/dist/commands/hook/install.js +175 -0
- package/dist/commands/hook/paths.d.ts +19 -0
- package/dist/commands/hook/paths.js +94 -0
- package/dist/commands/hook/status.d.ts +7 -0
- package/dist/commands/hook/status.js +86 -0
- package/dist/commands/hook/uninstall.d.ts +8 -0
- package/dist/commands/hook/uninstall.js +71 -0
- package/dist/commands/hook-dispatch.d.ts +15 -0
- package/dist/commands/hook-dispatch.js +180 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.js +133 -0
- package/dist/commands/kill.d.ts +12 -0
- package/dist/commands/kill.js +49 -0
- package/dist/commands/log.d.ts +13 -0
- package/dist/commands/log.js +97 -0
- package/dist/commands/parse-agent-message.d.ts +31 -0
- package/dist/commands/parse-agent-message.js +52 -0
- package/dist/commands/parse-common-flags.d.ts +36 -0
- package/dist/commands/parse-common-flags.js +105 -0
- package/dist/commands/ps.d.ts +12 -0
- package/dist/commands/ps.js +71 -0
- package/dist/commands/query.d.ts +21 -0
- package/dist/commands/query.js +117 -0
- package/dist/commands/result.d.ts +13 -0
- package/dist/commands/result.js +73 -0
- package/dist/commands/slack.d.ts +12 -0
- package/dist/commands/slack.js +559 -0
- package/dist/commands/task-db.d.ts +33 -0
- package/dist/commands/task-db.js +107 -0
- package/dist/examples/deny-secrets-plugin.d.ts +22 -0
- package/dist/examples/deny-secrets-plugin.js +40 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/logging.d.ts +21 -0
- package/dist/logging.js +86 -0
- package/dist/main.d.ts +10 -0
- package/dist/main.js +246 -256
- package/dist/plugins/examples/echo-hook.d.ts +24 -0
- package/dist/plugins/examples/echo-hook.js +60 -0
- package/dist/plugins/examples/verify-echo-hook.d.ts +8 -0
- package/dist/plugins/examples/verify-echo-hook.js +47 -0
- package/dist/plugins/sqlite-tracing.d.ts +13 -0
- package/dist/plugins/sqlite-tracing.js +20 -0
- package/dist/register-builtin-tools.d.ts +5 -0
- package/dist/register-builtin-tools.js +9 -0
- package/dist/slack/file-download.d.ts +17 -0
- package/dist/slack/file-download.js +134 -0
- package/dist/slack/markdown.d.ts +5 -0
- package/dist/slack/markdown.js +33 -0
- package/dist/utils/env-defaults.d.ts +5 -0
- package/dist/utils/env-defaults.js +10 -0
- package/dist/utils/version.d.ts +1 -0
- package/dist/utils/version.js +28 -0
- package/package.json +32 -115
- package/README.md +0 -663
- package/dist/ai-provider.service.d.ts +0 -36
- package/dist/ai-provider.service.js +0 -315
- package/dist/ai-provider.service.js.map +0 -1
- package/dist/ai.service.d.ts +0 -17
- package/dist/ai.service.js +0 -51
- package/dist/ai.service.js.map +0 -1
- package/dist/app.module.d.ts +0 -5
- package/dist/app.module.js +0 -165
- package/dist/app.module.js.map +0 -1
- package/dist/cli/agent.handler.d.ts +0 -2
- package/dist/cli/agent.handler.js +0 -186
- package/dist/cli/agent.handler.js.map +0 -1
- package/dist/cli/builtin.handler.d.ts +0 -3
- package/dist/cli/builtin.handler.js.map +0 -1
- package/dist/cli/chat.handler.d.ts +0 -20
- package/dist/cli/chat.handler.js +0 -446
- package/dist/cli/chat.handler.js.map +0 -1
- package/dist/cli/cli.handler.d.ts +0 -4
- package/dist/cli/cli.handler.js +0 -119
- package/dist/cli/cli.handler.js.map +0 -1
- package/dist/cli/doctor.handler.d.ts +0 -38
- package/dist/cli/doctor.handler.js +0 -495
- package/dist/cli/doctor.handler.js.map +0 -1
- package/dist/cli/execute.handler.d.ts +0 -2
- package/dist/cli/execute.handler.js +0 -376
- package/dist/cli/execute.handler.js.map +0 -1
- package/dist/cli/help.handler.d.ts +0 -2
- package/dist/cli/help.handler.js +0 -10
- package/dist/cli/help.handler.js.map +0 -1
- package/dist/cli/init.handler.d.ts +0 -26
- package/dist/cli/init.handler.js +0 -450
- package/dist/cli/init.handler.js.map +0 -1
- package/dist/cli/log.handler.d.ts +0 -2
- package/dist/cli/log.handler.js +0 -69
- package/dist/cli/log.handler.js.map +0 -1
- package/dist/cli/mcp.handler.d.ts +0 -3
- package/dist/cli/mcp.handler.js +0 -121
- package/dist/cli/mcp.handler.js.map +0 -1
- package/dist/cli/query.handler.d.ts +0 -2
- package/dist/cli/query.handler.js +0 -392
- package/dist/cli/query.handler.js.map +0 -1
- package/dist/cli/skill.handler.d.ts +0 -2
- package/dist/cli/skill.handler.js +0 -252
- package/dist/cli/skill.handler.js.map +0 -1
- package/dist/cli/slack-files.handler.d.ts +0 -2
- package/dist/cli/slack-files.handler.js +0 -291
- package/dist/cli/slack-files.handler.js.map +0 -1
- package/dist/cli/template.handler.d.ts +0 -2
- package/dist/cli/template.handler.js +0 -188
- package/dist/cli/template.handler.js.map +0 -1
- package/dist/cli/templates.handler.d.ts +0 -2
- package/dist/cli/templates.handler.js +0 -100
- package/dist/cli/templates.handler.js.map +0 -1
- package/dist/cli-options.d.ts +0 -40
- package/dist/cli-options.js +0 -371
- package/dist/cli-options.js.map +0 -1
- package/dist/config/timeout.config.d.ts +0 -14
- package/dist/config/timeout.config.js +0 -34
- package/dist/config/timeout.config.js.map +0 -1
- package/dist/conversation/base-conversation-history.provider.d.ts +0 -12
- package/dist/conversation/base-conversation-history.provider.js +0 -45
- package/dist/conversation/base-conversation-history.provider.js.map +0 -1
- package/dist/conversation/cli-box-reader.adapter.d.ts +0 -6
- package/dist/conversation/cli-box-reader.adapter.js +0 -10
- package/dist/conversation/cli-box-reader.adapter.js.map +0 -1
- package/dist/conversation/cli-conversation-history.provider.d.ts +0 -16
- package/dist/conversation/cli-conversation-history.provider.js +0 -112
- package/dist/conversation/cli-conversation-history.provider.js.map +0 -1
- package/dist/conversation/cli-task-reader.adapter.d.ts +0 -6
- package/dist/conversation/cli-task-reader.adapter.js +0 -25
- package/dist/conversation/cli-task-reader.adapter.js.map +0 -1
- package/dist/conversation/conversation-provider.factory.d.ts +0 -10
- package/dist/conversation/conversation-provider.factory.js +0 -50
- package/dist/conversation/conversation-provider.factory.js.map +0 -1
- package/dist/conversation/index.d.ts +0 -8
- package/dist/conversation/index.js +0 -29
- package/dist/conversation/index.js.map +0 -1
- package/dist/conversation/slack-conversation-history.provider.d.ts +0 -29
- package/dist/conversation/slack-conversation-history.provider.js +0 -302
- package/dist/conversation/slack-conversation-history.provider.js.map +0 -1
- package/dist/crewx.tool.d.ts +0 -360
- package/dist/crewx.tool.js +0 -2531
- package/dist/crewx.tool.js.map +0 -1
- package/dist/crewx.tool.spec.d.ts +0 -1
- package/dist/crewx.tool.spec.js +0 -222
- package/dist/crewx.tool.spec.js.map +0 -1
- package/dist/guards/bearer-auth.guard.d.ts +0 -7
- package/dist/guards/bearer-auth.guard.js +0 -44
- package/dist/guards/bearer-auth.guard.js.map +0 -1
- package/dist/health.controller.d.ts +0 -6
- package/dist/health.controller.js +0 -32
- package/dist/health.controller.js.map +0 -1
- package/dist/main.js.map +0 -1
- package/dist/mcp.controller.d.ts +0 -8
- package/dist/mcp.controller.js +0 -62
- package/dist/mcp.controller.js.map +0 -1
- package/dist/package.json +0 -3
- package/dist/providers/dynamic-provider.factory.d.ts +0 -17
- package/dist/providers/dynamic-provider.factory.js +0 -138
- package/dist/providers/dynamic-provider.factory.js.map +0 -1
- package/dist/providers/logger.adapter.d.ts +0 -7
- package/dist/providers/logger.adapter.js +0 -107
- package/dist/providers/logger.adapter.js.map +0 -1
- package/dist/services/agent-loader.service.d.ts +0 -35
- package/dist/services/agent-loader.service.js +0 -623
- package/dist/services/agent-loader.service.js.map +0 -1
- package/dist/services/auth.service.d.ts +0 -9
- package/dist/services/auth.service.js +0 -47
- package/dist/services/auth.service.js.map +0 -1
- package/dist/services/config-validator.service.d.ts +0 -29
- package/dist/services/config-validator.service.js +0 -483
- package/dist/services/config-validator.service.js.map +0 -1
- package/dist/services/config.service.d.ts +0 -45
- package/dist/services/config.service.js +0 -352
- package/dist/services/config.service.js.map +0 -1
- package/dist/services/document-loader.service.d.ts +0 -26
- package/dist/services/document-loader.service.js +0 -186
- package/dist/services/document-loader.service.js.map +0 -1
- package/dist/services/help.service.d.ts +0 -5
- package/dist/services/help.service.js +0 -139
- package/dist/services/help.service.js.map +0 -1
- package/dist/services/intelligent-compression.service.d.ts +0 -20
- package/dist/services/intelligent-compression.service.js +0 -179
- package/dist/services/intelligent-compression.service.js.map +0 -1
- package/dist/services/mcp-client.service.d.ts +0 -26
- package/dist/services/mcp-client.service.js +0 -81
- package/dist/services/mcp-client.service.js.map +0 -1
- package/dist/services/parallel-processing.service.d.ts +0 -108
- package/dist/services/parallel-processing.service.js +0 -333
- package/dist/services/parallel-processing.service.js.map +0 -1
- package/dist/services/provider-bridge.service.d.ts +0 -35
- package/dist/services/provider-bridge.service.js +0 -224
- package/dist/services/provider-bridge.service.js.map +0 -1
- package/dist/services/remote-agent.service.d.ts +0 -50
- package/dist/services/remote-agent.service.js +0 -171
- package/dist/services/remote-agent.service.js.map +0 -1
- package/dist/services/result-formatter.service.d.ts +0 -27
- package/dist/services/result-formatter.service.js +0 -126
- package/dist/services/result-formatter.service.js.map +0 -1
- package/dist/services/skill-loader.service.d.ts +0 -15
- package/dist/services/skill-loader.service.js +0 -278
- package/dist/services/skill-loader.service.js.map +0 -1
- package/dist/services/skill.service.d.ts +0 -69
- package/dist/services/skill.service.js +0 -779
- package/dist/services/skill.service.js.map +0 -1
- package/dist/services/skill.service.spec.d.ts +0 -1
- package/dist/services/skill.service.spec.js +0 -168
- package/dist/services/skill.service.spec.js.map +0 -1
- package/dist/services/task-management.service.d.ts +0 -71
- package/dist/services/task-management.service.js +0 -324
- package/dist/services/task-management.service.js.map +0 -1
- package/dist/services/template.service.d.ts +0 -61
- package/dist/services/template.service.js +0 -416
- package/dist/services/template.service.js.map +0 -1
- package/dist/services/tool-call.service.d.ts +0 -16
- package/dist/services/tool-call.service.js +0 -302
- package/dist/services/tool-call.service.js.map +0 -1
- package/dist/services/tracing.service.d.ts +0 -197
- package/dist/services/tracing.service.js +0 -1267
- package/dist/services/tracing.service.js.map +0 -1
- package/dist/slack/formatters/message.formatter.d.ts +0 -43
- package/dist/slack/formatters/message.formatter.js +0 -505
- package/dist/slack/formatters/message.formatter.js.map +0 -1
- package/dist/slack/services/slack-file-download.service.d.ts +0 -58
- package/dist/slack/services/slack-file-download.service.js +0 -558
- package/dist/slack/services/slack-file-download.service.js.map +0 -1
- package/dist/slack/slack-bot.d.ts +0 -33
- package/dist/slack/slack-bot.js +0 -568
- package/dist/slack/slack-bot.js.map +0 -1
- package/dist/stderr.logger.d.ts +0 -8
- package/dist/stderr.logger.js +0 -26
- package/dist/stderr.logger.js.map +0 -1
- package/dist/types/usage.types.d.ts +0 -107
- package/dist/types/usage.types.js +0 -3
- package/dist/types/usage.types.js.map +0 -1
- package/dist/utils/config-utils.d.ts +0 -15
- package/dist/utils/config-utils.js +0 -69
- package/dist/utils/config-utils.js.map +0 -1
- package/dist/utils/extract-text.d.ts +0 -1
- package/dist/utils/extract-text.js +0 -15
- package/dist/utils/extract-text.js.map +0 -1
- package/dist/utils/mcp-installer.d.ts +0 -20
- package/dist/utils/mcp-installer.js +0 -199
- package/dist/utils/mcp-installer.js.map +0 -1
- package/dist/utils/project-hash.d.ts +0 -6
- package/dist/utils/project-hash.js +0 -70
- package/dist/utils/project-hash.js.map +0 -1
- package/dist/utils/simple-security.d.ts +0 -3
- package/dist/utils/simple-security.js +0 -20
- package/dist/utils/simple-security.js.map +0 -1
- package/dist/utils/stdin-utils.d.ts +0 -6
- package/dist/utils/stdin-utils.js +0 -109
- package/dist/utils/stdin-utils.js.map +0 -1
- package/dist/utils/template-processor.d.ts +0 -27
- package/dist/utils/template-processor.js +0 -395
- package/dist/utils/template-processor.js.map +0 -1
- package/dist/utils/terminal-message-formatter.d.ts +0 -23
- package/dist/utils/terminal-message-formatter.js +0 -136
- package/dist/utils/terminal-message-formatter.js.map +0 -1
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -17
- package/dist/version.js.map +0 -1
- package/dist/workspace.service.d.ts +0 -44
- package/dist/workspace.service.js +0 -299
- package/dist/workspace.service.js.map +0 -1
- package/scripts/backfill-tokens.js +0 -218
- package/scripts/postbuild-cli.mjs +0 -88
- package/scripts/postinstall-cli.mjs +0 -30
- package/templates/agents/default.yaml +0 -490
- package/templates/agents/minimal.yaml +0 -16
- package/templates/documents/conversation-history-default.hbs +0 -17
- package/templates/documents/crewx-manual.md +0 -2278
- package/templates/documents/crewx-quick-guide.md +0 -147
- package/templates/versions.json +0 -19
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Phase 0 e2e verification — EchoHookPlugin logs Claude Code tool calls.
|
|
5
|
+
*
|
|
6
|
+
* Run: npx tsx packages/cli/src/plugins/examples/verify-echo-hook.ts
|
|
7
|
+
* Prereq: claude CLI installed, crewx.yaml with @claude agent
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const sdk_1 = require("@crewx/sdk");
|
|
11
|
+
const echo_hook_1 = require("./echo-hook");
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const path_1 = require("path");
|
|
14
|
+
const os_1 = require("os");
|
|
15
|
+
const LOG_PATH = (0, path_1.join)((0, os_1.homedir)(), '.crewx', 'logs', 'echo-hook.log');
|
|
16
|
+
async function main() {
|
|
17
|
+
if ((0, fs_1.existsSync)(LOG_PATH))
|
|
18
|
+
(0, fs_1.unlinkSync)(LOG_PATH);
|
|
19
|
+
const crewx = await sdk_1.Crewx.loadYaml('crewx.yaml');
|
|
20
|
+
await crewx.use(new echo_hook_1.EchoHookPlugin());
|
|
21
|
+
console.log('[verify] querying @claude with "ls"...');
|
|
22
|
+
await crewx.query('@claude', 'Run ls in the current directory. Use the Bash tool.');
|
|
23
|
+
await crewx.close();
|
|
24
|
+
if (!(0, fs_1.existsSync)(LOG_PATH)) {
|
|
25
|
+
console.error('[FAIL] echo-hook.log not created');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const lines = (0, fs_1.readFileSync)(LOG_PATH, 'utf8').trim().split('\n');
|
|
29
|
+
const entries = lines.map((l) => JSON.parse(l));
|
|
30
|
+
const hasBeforeTool = entries.some((e) => e.event === 'beforeTool');
|
|
31
|
+
const hasTraceId = entries.every((e) => e.traceId?.startsWith('tsk_'));
|
|
32
|
+
const hasToolName = entries
|
|
33
|
+
.filter((e) => e.event === 'beforeTool')
|
|
34
|
+
.every((e) => typeof e.tool?.rawName === 'string' && e.tool.rawName.length > 0);
|
|
35
|
+
console.log(`[verify] entries: ${entries.length}`);
|
|
36
|
+
console.log(`[verify] beforeTool: ${hasBeforeTool}`);
|
|
37
|
+
console.log(`[verify] traceId: ${hasTraceId}`);
|
|
38
|
+
console.log(`[verify] toolName: ${hasToolName}`);
|
|
39
|
+
if (hasBeforeTool && hasTraceId && hasToolName) {
|
|
40
|
+
console.log('[PASS] Phase 0 e2e verification passed');
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.error('[FAIL] Some checks failed');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
main().catch((err) => { console.error(err); process.exit(1); });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI convenience wrapper for SqliteTracingPlugin.
|
|
3
|
+
* Accepts a dbRoot string or an options object so existing CLI tests can pass
|
|
4
|
+
* a temp directory path directly.
|
|
5
|
+
*/
|
|
6
|
+
import { SqliteTracingPlugin as SdkPlugin } from '@crewx/sdk/plugins';
|
|
7
|
+
export type { SqliteTracingPluginOptions } from '@crewx/sdk/plugins';
|
|
8
|
+
export declare class SqliteTracingPlugin extends SdkPlugin {
|
|
9
|
+
constructor(dbRootOrOpts?: string | {
|
|
10
|
+
dbRoot?: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqliteTracingPlugin = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* CLI convenience wrapper for SqliteTracingPlugin.
|
|
6
|
+
* Accepts a dbRoot string or an options object so existing CLI tests can pass
|
|
7
|
+
* a temp directory path directly.
|
|
8
|
+
*/
|
|
9
|
+
const plugins_1 = require("@crewx/sdk/plugins");
|
|
10
|
+
class SqliteTracingPlugin extends plugins_1.SqliteTracingPlugin {
|
|
11
|
+
constructor(dbRootOrOpts) {
|
|
12
|
+
if (typeof dbRootOrOpts === 'string') {
|
|
13
|
+
super({ dbRoot: dbRootOrOpts });
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
super(dbRootOrOpts);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.SqliteTracingPlugin = SqliteTracingPlugin;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerBuiltinToolsIfNeeded = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Register built-in Node.js tools for api/* provider agents.
|
|
6
|
+
* Delegates to @crewx/sdk/tools/node.
|
|
7
|
+
*/
|
|
8
|
+
var node_1 = require("@crewx/sdk/tools/node");
|
|
9
|
+
Object.defineProperty(exports, "registerBuiltinToolsIfNeeded", { enumerable: true, get: function () { return node_1.registerBuiltinTools; } });
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight Slack file downloader for CLI bot mode.
|
|
3
|
+
* Ported from cli-bak SlackFileDownloadService, stripped of NestJS deps.
|
|
4
|
+
* Uses Node.js built-in https for API calls.
|
|
5
|
+
*/
|
|
6
|
+
export interface DownloadedFile {
|
|
7
|
+
fileId: string;
|
|
8
|
+
fileName: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
fileSize: number;
|
|
11
|
+
threadId: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function downloadInboundFiles(botToken: string, files: Array<{
|
|
14
|
+
url_private: string;
|
|
15
|
+
mimetype: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}>, threadId: string): Promise<DownloadedFile[]>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight Slack file downloader for CLI bot mode.
|
|
4
|
+
* Ported from cli-bak SlackFileDownloadService, stripped of NestJS deps.
|
|
5
|
+
* Uses Node.js built-in https for API calls.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.downloadInboundFiles = downloadInboundFiles;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const https = __importStar(require("https"));
|
|
45
|
+
const MAX_FILE_SIZE = 50 * 1024 * 1024;
|
|
46
|
+
async function downloadInboundFiles(botToken, files, threadId) {
|
|
47
|
+
if (!files || files.length === 0)
|
|
48
|
+
return [];
|
|
49
|
+
const results = [];
|
|
50
|
+
const downloadDir = path.join(process.cwd(), '.crewx', 'slack-files');
|
|
51
|
+
const safeThreadDir = threadId.replace(/:/g, '_');
|
|
52
|
+
for (const file of files) {
|
|
53
|
+
if (!file.url_private)
|
|
54
|
+
continue;
|
|
55
|
+
const sanitizedName = sanitizeFileName(file.name || 'unnamed_file');
|
|
56
|
+
const saveDir = path.join(downloadDir, safeThreadDir);
|
|
57
|
+
const savePath = path.join(saveDir, sanitizedName);
|
|
58
|
+
try {
|
|
59
|
+
if (fs.existsSync(savePath)) {
|
|
60
|
+
const stats = fs.statSync(savePath);
|
|
61
|
+
results.push({
|
|
62
|
+
fileId: '',
|
|
63
|
+
fileName: sanitizedName,
|
|
64
|
+
filePath: savePath,
|
|
65
|
+
fileSize: stats.size,
|
|
66
|
+
threadId,
|
|
67
|
+
});
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
await fs.promises.mkdir(saveDir, { recursive: true });
|
|
71
|
+
const buffer = await fetchUrl(botToken, file.url_private);
|
|
72
|
+
if (buffer.length > MAX_FILE_SIZE) {
|
|
73
|
+
console.error(`File too large: ${sanitizedName} (${formatSize(buffer.length)})`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
await fs.promises.writeFile(savePath, buffer);
|
|
77
|
+
results.push({
|
|
78
|
+
fileId: '',
|
|
79
|
+
fileName: sanitizedName,
|
|
80
|
+
filePath: savePath,
|
|
81
|
+
fileSize: buffer.length,
|
|
82
|
+
threadId,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(`Failed to download file ${sanitizedName}: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
function fetchUrl(token, url) {
|
|
92
|
+
const parsed = new URL(url);
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
const options = {
|
|
95
|
+
hostname: parsed.hostname,
|
|
96
|
+
path: parsed.pathname + parsed.search,
|
|
97
|
+
method: 'GET',
|
|
98
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
99
|
+
};
|
|
100
|
+
const req = https.request(options, (res) => {
|
|
101
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
102
|
+
const location = res.headers.location;
|
|
103
|
+
if (location) {
|
|
104
|
+
fetchUrl(token, location).then(resolve).catch(reject);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (res.statusCode !== 200) {
|
|
109
|
+
reject(new Error(`HTTP ${res.statusCode}`));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const chunks = [];
|
|
113
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
114
|
+
res.on('end', () => resolve(Buffer.concat(chunks)));
|
|
115
|
+
res.on('error', reject);
|
|
116
|
+
});
|
|
117
|
+
req.on('error', reject);
|
|
118
|
+
req.setTimeout(30000, () => { req.destroy(); reject(new Error('Timeout')); });
|
|
119
|
+
req.end();
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function sanitizeFileName(name) {
|
|
123
|
+
let safe = name.replace(/[/\\]/g, '_').replace(/\.\./g, '_');
|
|
124
|
+
safe = safe.replace(/[\x00-\x1f\x80-\x9f<>:"|?*]/g, '_');
|
|
125
|
+
safe = safe.replace(/^\.+|\.+$/g, '').trim();
|
|
126
|
+
return safe || 'unnamed_file';
|
|
127
|
+
}
|
|
128
|
+
function formatSize(bytes) {
|
|
129
|
+
if (bytes < 1024)
|
|
130
|
+
return `${bytes}B`;
|
|
131
|
+
if (bytes < 1024 * 1024)
|
|
132
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
133
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
134
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight Markdown → Slack mrkdwn converter.
|
|
4
|
+
* Ported from cli-bak formatters, stripped of NestJS / md-to-slack deps.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.markdownToMrkdwn = markdownToMrkdwn;
|
|
8
|
+
const HEADING_RE = /^(#{1,6})\s+(.+)$/gm;
|
|
9
|
+
const BOLD_RE = /\*\*([^*]+)\*\*/g;
|
|
10
|
+
const ITALIC_RE = /(?<!\*)\*([^*]+)\*(?!\*)/g;
|
|
11
|
+
const CODE_BLOCK_RE = /```(\w*)\n([\s\S]*?)```/g;
|
|
12
|
+
const INLINE_CODE_RE = /`([^`]+)`/g;
|
|
13
|
+
const LINK_RE = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
14
|
+
const UNORDERED_LIST_RE = /^[\s]*[-*]\s+/gm;
|
|
15
|
+
const ORDERED_LIST_RE = /^[\s]*(\d+)\.\s+/gm;
|
|
16
|
+
function markdownToMrkdwn(text) {
|
|
17
|
+
if (!text)
|
|
18
|
+
return '';
|
|
19
|
+
let result = text;
|
|
20
|
+
result = result.replace(CODE_BLOCK_RE, (_match, _lang, code) => {
|
|
21
|
+
return `\`\`\`${code.trim()}\`\`\``;
|
|
22
|
+
});
|
|
23
|
+
result = result.replace(INLINE_CODE_RE, '`$1`');
|
|
24
|
+
result = result.replace(HEADING_RE, (_match, _hashes, content) => {
|
|
25
|
+
return `*${content.trim()}*`;
|
|
26
|
+
});
|
|
27
|
+
result = result.replace(BOLD_RE, '*$1*');
|
|
28
|
+
result = result.replace(ITALIC_RE, '_$1_');
|
|
29
|
+
result = result.replace(LINK_RE, '<$2|$1>');
|
|
30
|
+
result = result.replace(UNORDERED_LIST_RE, '• ');
|
|
31
|
+
result = result.replace(ORDERED_LIST_RE, '$1. ');
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveCrewxWorkspace = exports.resolveCrewxCli = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* CREWX_* environment variable defaults for CLI bootstrap.
|
|
6
|
+
* Re-exported from @crewx/sdk for convenience.
|
|
7
|
+
*/
|
|
8
|
+
var sdk_1 = require("@crewx/sdk");
|
|
9
|
+
Object.defineProperty(exports, "resolveCrewxCli", { enumerable: true, get: function () { return sdk_1.resolveCrewxCli; } });
|
|
10
|
+
Object.defineProperty(exports, "resolveCrewxWorkspace", { enumerable: true, get: function () { return sdk_1.resolveCrewxWorkspace; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CLI_VERSION: string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CLI_VERSION = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
/**
|
|
7
|
+
* Return the installed @crewx/cli package version.
|
|
8
|
+
*
|
|
9
|
+
* Resolution strategy (mirrors cli-bak version.ts):
|
|
10
|
+
* 1. Read the package.json that is co-located with the compiled dist tree.
|
|
11
|
+
* At runtime __dirname resolves to dist/utils/, so ../../package.json
|
|
12
|
+
* reaches the package root — both in development and in an npm-installed
|
|
13
|
+
* deployment (node_modules/@crewx/cli/package.json).
|
|
14
|
+
* 2. Fall back to '0.0.0' on any I/O or parse error.
|
|
15
|
+
*
|
|
16
|
+
* Result is cached in the module-level constant to avoid repeated disk reads.
|
|
17
|
+
*/
|
|
18
|
+
function readVersion() {
|
|
19
|
+
try {
|
|
20
|
+
const pkgPath = (0, path_1.join)(__dirname, '../../package.json');
|
|
21
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(pkgPath, 'utf8'));
|
|
22
|
+
return pkg.version ?? '0.0.0';
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return '0.0.0';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.CLI_VERSION = readVersion();
|
package/package.json
CHANGED
|
@@ -1,135 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewx/cli",
|
|
3
|
-
"version": "0.8.0-rc.
|
|
3
|
+
"version": "0.8.0-rc.82",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.19.0"
|
|
7
7
|
},
|
|
8
|
-
"description": "
|
|
9
|
-
"private": false,
|
|
8
|
+
"description": "CrewX CLI — thin wrapper over @crewx/sdk",
|
|
10
9
|
"type": "commonjs",
|
|
11
10
|
"main": "dist/main.js",
|
|
12
|
-
"
|
|
13
|
-
"bin": {
|
|
14
|
-
"crewx": "dist/main.js"
|
|
15
|
-
},
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
16
12
|
"exports": {
|
|
17
13
|
".": {
|
|
18
|
-
"
|
|
19
|
-
"
|
|
14
|
+
"require": "./dist/index.js",
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
20
17
|
}
|
|
21
18
|
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"crewx": "bin/crewx"
|
|
21
|
+
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist",
|
|
24
|
-
"
|
|
25
|
-
"README.md"
|
|
26
|
-
"docs",
|
|
27
|
-
"templates"
|
|
24
|
+
"bin",
|
|
25
|
+
"README.md"
|
|
28
26
|
],
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"better-sqlite3": "*",
|
|
29
|
+
"@crewx/sdk": "0.8.0-rc.82",
|
|
30
|
+
"@crewx/memory": "0.1.8",
|
|
31
|
+
"@crewx/doc": "0.1.6",
|
|
32
|
+
"@crewx/wbs": "0.1.7",
|
|
33
|
+
"@crewx/search": "0.1.6",
|
|
34
|
+
"@crewx/cron": "0.1.6",
|
|
35
|
+
"@crewx/skill": "0.1.5",
|
|
36
|
+
"@crewx/shared": "0.0.4",
|
|
37
|
+
"@crewx/workflow": "0.3.6",
|
|
38
|
+
"@crewx/adapter-slack": "0.1.0"
|
|
36
39
|
},
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/better-sqlite3": "*",
|
|
42
|
+
"@types/node": "^22.0.0",
|
|
43
|
+
"typescript": "^5.4.0",
|
|
44
|
+
"vitest": "^3.1.1"
|
|
40
45
|
},
|
|
41
46
|
"scripts": {
|
|
42
|
-
"build": "
|
|
43
|
-
"postbuild": "node ./scripts/postbuild-cli.mjs",
|
|
44
|
-
"postinstall": "node ./scripts/postinstall-cli.mjs",
|
|
45
|
-
"start": "node dist/main.js",
|
|
46
|
-
"start:mcp": "node dist/main.js mcp",
|
|
47
|
-
"start:slack": "caffeinate -i dotenv -e ../../.env.slack -- node dist/main.js slack --log --agent crewx_glm_dev",
|
|
48
|
-
"dev": "dotenv -e ../../.env.test -- nest start --watch -- --log",
|
|
49
|
-
"dev:install": "ts-node ../../src/main.ts --install --log",
|
|
50
|
-
"debug": "dotenv -e ../../.env.test -- nest start --debug --watch -- --log --protocol HTTP",
|
|
51
|
-
"inspector": "npx @modelcontextprotocol/inspector --config ../../inspector.config.json --server crewx",
|
|
47
|
+
"build": "tsc -p tsconfig.json",
|
|
52
48
|
"test": "vitest run --config ./vitest.config.ts",
|
|
53
49
|
"test:watch": "vitest --config ./vitest.config.ts",
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"test:e2e": "vitest run --config ./vitest.e2e.config.ts",
|
|
58
|
-
"test:coverage": "vitest run --config ./vitest.config.ts --coverage",
|
|
59
|
-
"cli": "npm run build && node dist/main.js",
|
|
60
|
-
"cli:help": "npm run build && node dist/main.js",
|
|
61
|
-
"cli:init": "npm run build && node dist/main.js init",
|
|
62
|
-
"cli:doctor": "npm run build && node dist/main.js doctor",
|
|
63
|
-
"cli:query": "npm run build && node dist/main.js query",
|
|
64
|
-
"cli:execute": "npm run build && node dist/main.js execute",
|
|
65
|
-
"mcp": "npm run build && node dist/main.js mcp",
|
|
66
|
-
"mcp:log": "npm run build && node dist/main.js mcp --log",
|
|
67
|
-
"prepack": "npm run build"
|
|
68
|
-
},
|
|
69
|
-
"dependencies": {
|
|
70
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
71
|
-
"@nestjs/common": "^11.0.0",
|
|
72
|
-
"@nestjs/core": "^11.0.0",
|
|
73
|
-
"@nestjs/platform-express": "^11.0.0",
|
|
74
|
-
"@slack/bolt": "^4.4.0",
|
|
75
|
-
"@slack/web-api": "^7.10.0",
|
|
76
|
-
"@crewx/sdk": "workspace:*",
|
|
77
|
-
"@sowonai/nestjs-mcp-adapter": "^0.1.3",
|
|
78
|
-
"@types/js-yaml": "^4.0.9",
|
|
79
|
-
"@types/mdast": "^4.0.4",
|
|
80
|
-
"@types/unist": "^3.0.3",
|
|
81
|
-
"ajv": "^8.17.1",
|
|
82
|
-
"ajv-formats": "^3.0.1",
|
|
83
|
-
"chalk": "^4.1.2",
|
|
84
|
-
"dotenv": "^17.2.3",
|
|
85
|
-
"execa": "^8.0.1",
|
|
86
|
-
"fast-glob": "^3.3.0",
|
|
87
|
-
"giget": "^2.0.0",
|
|
88
|
-
"handlebars": "^4.7.8",
|
|
89
|
-
"ignore": "^5.2.0",
|
|
90
|
-
"js-yaml": "^4.1.0",
|
|
91
|
-
"md-to-slack": "^1.0.0",
|
|
92
|
-
"node-sqlite3-wasm": "^0.8.30",
|
|
93
|
-
"reflect-metadata": "^0.2.2",
|
|
94
|
-
"remark-parse": "^11.0.0",
|
|
95
|
-
"remark-stringify": "^11.0.0",
|
|
96
|
-
"rxjs": "^7.8.0",
|
|
97
|
-
"unified": "^11.0.5",
|
|
98
|
-
"unist-util-visit": "^5.0.0",
|
|
99
|
-
"yargs": "^17.7.0",
|
|
100
|
-
"zod": "^3.22.0",
|
|
101
|
-
"@crewx/memory": "workspace:*",
|
|
102
|
-
"@crewx/search": "workspace:*",
|
|
103
|
-
"@crewx/doc": "workspace:*",
|
|
104
|
-
"@crewx/wbs": "workspace:*",
|
|
105
|
-
"@crewx/cron": "workspace:*"
|
|
106
|
-
},
|
|
107
|
-
"optionalDependencies": {},
|
|
108
|
-
"devDependencies": {
|
|
109
|
-
"@nestjs/cli": "^11.0.0",
|
|
110
|
-
"@nestjs/schematics": "^11.0.0",
|
|
111
|
-
"@nestjs/testing": "^11.0.0",
|
|
112
|
-
"@types/ajv": "^0.0.5",
|
|
113
|
-
"@types/express": "^5.0.3",
|
|
114
|
-
"@types/node": "^20.19.19",
|
|
115
|
-
"@types/yargs": "^17.0.0",
|
|
116
|
-
"@vitest/ui": "^1.0.0",
|
|
117
|
-
"dotenv-cli": "^6.0.0",
|
|
118
|
-
"ts-loader": "^9.0.0",
|
|
119
|
-
"ts-node": "^10.0.0",
|
|
120
|
-
"tsconfig-paths": "^4.2.0",
|
|
121
|
-
"typescript": "^5.0.0",
|
|
122
|
-
"vitest": "^1.0.0"
|
|
123
|
-
},
|
|
124
|
-
"keywords": [
|
|
125
|
-
"crewx",
|
|
126
|
-
"claude",
|
|
127
|
-
"gemini",
|
|
128
|
-
"copilot",
|
|
129
|
-
"mcp",
|
|
130
|
-
"ai",
|
|
131
|
-
"model-context-protocol",
|
|
132
|
-
"multi-agent",
|
|
133
|
-
"ai-collaboration"
|
|
134
|
-
]
|
|
135
|
-
}
|
|
50
|
+
"lint": "echo 'CLI lint pending' && exit 0"
|
|
51
|
+
}
|
|
52
|
+
}
|