@crewx/cli 0.9.0-rc.145 → 0.9.0-rc.147

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 (45) hide show
  1. package/dist/bootstrap/codex-writable-roots.js +1 -113
  2. package/dist/bootstrap/crewx-cli.js +1 -84
  3. package/dist/builtin.js +5 -132
  4. package/dist/commands/agent.js +4 -118
  5. package/dist/commands/cal.js +2 -44
  6. package/dist/commands/db.js +4 -602
  7. package/dist/commands/detached.js +15 -620
  8. package/dist/commands/doctor.js +4 -649
  9. package/dist/commands/emit-trailer.js +2 -33
  10. package/dist/commands/execute.js +15 -294
  11. package/dist/commands/hook/command-marker.js +1 -5
  12. package/dist/commands/hook/install.js +8 -189
  13. package/dist/commands/hook/paths.js +1 -94
  14. package/dist/commands/hook/status.js +1 -86
  15. package/dist/commands/hook/uninstall.js +1 -71
  16. package/dist/commands/hook-dispatch.js +2 -180
  17. package/dist/commands/init.js +31 -437
  18. package/dist/commands/kill.js +1 -11
  19. package/dist/commands/log.js +3 -96
  20. package/dist/commands/parse-agent-message.js +1 -52
  21. package/dist/commands/parse-common-flags.js +3 -212
  22. package/dist/commands/ps.js +2 -117
  23. package/dist/commands/publish.js +7 -283
  24. package/dist/commands/query.js +16 -292
  25. package/dist/commands/registry.js +1 -33
  26. package/dist/commands/resolve-prompt.js +3 -76
  27. package/dist/commands/resolve-recipient.js +3 -47
  28. package/dist/commands/restart.js +18 -172
  29. package/dist/commands/result.js +1 -209
  30. package/dist/commands/shortcut.js +4 -253
  31. package/dist/commands/slack.js +16 -560
  32. package/dist/commands/stop.js +8 -119
  33. package/dist/commands/write-output.js +1 -24
  34. package/dist/index.js +1 -8
  35. package/dist/logging.js +10 -87
  36. package/dist/main.js +6 -289
  37. package/dist/register-builtin-tools.js +1 -9
  38. package/dist/slack/file-download.js +1 -134
  39. package/dist/slack/markdown.js +1 -33
  40. package/dist/utils/env-defaults.js +1 -15
  41. package/dist/utils/inherited-trace.js +1 -65
  42. package/dist/utils/product-package-root.js +1 -39
  43. package/dist/utils/sdk-compat.js +1 -120
  44. package/dist/utils/version.js +1 -28
  45. package/package.json +15 -15
@@ -1,113 +1 @@
1
- "use strict";
2
- /**
3
- * CLI-layer policy: inject CrewX home as an extra writable root for Codex
4
- * `workspace-write` sandbox invocations.
5
- *
6
- * Why this lives in packages/cli (not packages/sdk):
7
- * CrewX home (`~/.crewx` by default) is a product-specific path. The SDK's
8
- * `additionalArgsProvider` extension point (WI-20260703-001) exists precisely
9
- * so that product layers like this CLI can inject such paths without the SDK
10
- * knowing about them.
11
- *
12
- * Why `-c sandbox_workspace_write.writable_roots=[...]` instead of `--add-dir`:
13
- * Verified against codex-cli 0.139.0 (`codex exec --help` / `codex exec resume --help`):
14
- * - `codex exec` supports `--add-dir <DIR>`.
15
- * - `codex exec resume` does NOT support `--add-dir` (only `-c/--config`).
16
- * Using the `-c` config-override form works identically for both `exec` and
17
- * `exec resume`, avoiding a resume-incompatible flag.
18
- */
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.resolveCrewxHome = resolveCrewxHome;
21
- exports.escapeTomlBasicString = escapeTomlBasicString;
22
- exports.buildCodexWritableRootArgs = buildCodexWritableRootArgs;
23
- exports.createCodexSkipGitRepoCheckProvider = createCodexSkipGitRepoCheckProvider;
24
- exports.composeAdditionalArgsProviders = composeAdditionalArgsProviders;
25
- exports.createCodexWritableRootsProvider = createCodexWritableRootsProvider;
26
- const os_1 = require("os");
27
- const path_1 = require("path");
28
- /**
29
- * crewx.yaml / query-option `mode` values for which Codex is NOT running in
30
- * (or being pushed into) a `workspace-write`-equivalent sandbox. Injecting an
31
- * extra writable root is meaningless (read-only/plan) or redundant
32
- * (full-access variants already allow writes everywhere) in these modes.
33
- */
34
- const NO_INJECT_MODES = new Set([
35
- 'read-only',
36
- 'plan',
37
- 'agent-full-access',
38
- 'yolo',
39
- 'danger-full-access',
40
- ]);
41
- /**
42
- * Resolve CrewX home directory.
43
- * Priority: `CREWX_HOME` env var → `~/.crewx`.
44
- */
45
- function resolveCrewxHome() {
46
- return process.env.CREWX_HOME ?? (0, path_1.join)((0, os_1.homedir)(), '.crewx');
47
- }
48
- /**
49
- * Escape a string for embedding inside a TOML basic string (`"..."`).
50
- * Sufficient for filesystem paths: handles backslash (Windows paths),
51
- * double-quote, and control characters that could otherwise break TOML
52
- * parsing of the `-c key="value"` override.
53
- */
54
- function escapeTomlBasicString(value) {
55
- return value
56
- .replace(/\\/g, '\\\\')
57
- .replace(/"/g, '\\"')
58
- .replace(/\n/g, '\\n')
59
- .replace(/\r/g, '\\r')
60
- .replace(/\t/g, '\\t');
61
- }
62
- /**
63
- * Build the `-c sandbox_workspace_write.writable_roots=["<path>"]` arg pair.
64
- * Works for both `codex exec` and `codex exec resume` (config-override form).
65
- */
66
- function buildCodexWritableRootArgs(crewxHome) {
67
- const escaped = escapeTomlBasicString(crewxHome);
68
- return ['-c', `sandbox_workspace_write.writable_roots=["${escaped}"]`];
69
- }
70
- function isCodexProvider(ctx) {
71
- return ctx.providerId === 'codex' || ctx.providerStr === 'cli/codex';
72
- }
73
- /**
74
- * Create an `AdditionalArgsProvider` that skips Codex's git repository trust
75
- * check for a resolved workspace.
76
- *
77
- * The workspace is resolved by the product layer, so an unavailable workspace
78
- * must not fall back to the host cwd. The flag is independent of execution
79
- * mode because it controls repository trust rather than filesystem access.
80
- */
81
- function createCodexSkipGitRepoCheckProvider(workspaceRoot) {
82
- return (ctx) => {
83
- if (!isCodexProvider(ctx))
84
- return [];
85
- if (!workspaceRoot)
86
- return [];
87
- return ['--skip-git-repo-check'];
88
- };
89
- }
90
- /**
91
- * Compose product-layer argument providers while preserving their order.
92
- */
93
- function composeAdditionalArgsProviders(...providers) {
94
- return (ctx) => providers.flatMap((provider) => provider(ctx));
95
- }
96
- /**
97
- * Create an `AdditionalArgsProvider` (SDK extension point, WI-20260703-001)
98
- * that injects CrewX home as a Codex writable root for `workspace-write`
99
- * equivalent modes (`agent`, `auto`, `undefined`).
100
- *
101
- * No-ops for:
102
- * - Non-codex providers.
103
- * - Modes in {@link NO_INJECT_MODES} (read-only/plan/agent-full-access/yolo/danger-full-access).
104
- */
105
- function createCodexWritableRootsProvider(crewxHome = resolveCrewxHome()) {
106
- return (ctx) => {
107
- if (!isCodexProvider(ctx))
108
- return [];
109
- if (ctx.mode !== undefined && NO_INJECT_MODES.has(ctx.mode))
110
- return [];
111
- return buildCodexWritableRootArgs(crewxHome);
112
- };
113
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.resolveCrewxHome=o;exports.escapeTomlBasicString=t;exports.buildCodexWritableRootArgs=i;exports.createCodexSkipGitRepoCheckProvider=u;exports.composeAdditionalArgsProviders=l;exports.createCodexWritableRootsProvider=p;const s=require("os");const d=require("path");const a=new Set(["read-only","plan","agent-full-access","yolo","danger-full-access"]);function o(){return process.env.CREWX_HOME??(0,d.join)((0,s.homedir)(),".crewx")}function t(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}function i(e){const r=t(e);return["-c",`sandbox_workspace_write.writable_roots=["${r}"]`]}function n(e){return e.providerId==="codex"||e.providerStr==="cli/codex"}function u(e){return r=>{if(!n(r))return[];if(!e)return[];return["--skip-git-repo-check"]}}function l(...e){return r=>e.flatMap(c=>c(r))}function p(e=o()){return r=>{if(!n(r))return[];if(r.mode!==void 0&&a.has(r.mode))return[];return i(e)}}
@@ -1,84 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCliCrewx = createCliCrewx;
4
- const fs_1 = require("fs");
5
- const path_1 = require("path");
6
- const os_1 = require("os");
7
- const sdk_1 = require("@crewx/sdk");
8
- const list_1 = require("@crewx/workflow/list");
9
- const plugins_1 = require("@crewx/sdk/plugins");
10
- const repository_1 = require("@crewx/sdk/repository");
11
- const register_builtin_tools_1 = require("../register-builtin-tools");
12
- const version_1 = require("../utils/version");
13
- const inherited_trace_1 = require("../utils/inherited-trace");
14
- const codex_writable_roots_1 = require("./codex-writable-roots");
15
- /**
16
- * Build a Crewx instance with CLI-standard plugins (FileLogger + SqliteTracing)
17
- * and built-in tools registered. Use this from any CLI command that needs a
18
- * Crewx instance — keeps environment consistent across query / execute / slack / agent.
19
- *
20
- * workspaceRoot is always process.cwd()-based so that per-workspace logs land
21
- * in {cwd}/.crewx/logs/. Critical for file:// remote agent delegation.
22
- *
23
- * Behavior:
24
- * - If configPath resolves to an existing file → load it (with built-ins merged)
25
- * - If configPath is NOT set via CREWX_CONFIG env AND the file doesn't exist →
26
- * fall back to built-in-only mode (no user yaml required)
27
- * - If CREWX_CONFIG is explicitly set AND the file doesn't exist → throw
28
- */
29
- async function createCliCrewx(configPath = process.env.CREWX_CONFIG ?? 'crewx.yaml') {
30
- const absConfigPath = (0, path_1.resolve)(configPath);
31
- // workspaceRoot is always cwd-based, never package-internal
32
- const workspaceRoot = process.cwd();
33
- const isExplicitConfig = Boolean(process.env.CREWX_CONFIG);
34
- const fileExists = (0, fs_1.existsSync)(absConfigPath);
35
- let yamlPath;
36
- if (fileExists) {
37
- yamlPath = absConfigPath;
38
- }
39
- else if (isExplicitConfig) {
40
- throw new Error(`[crewx] Config file not found: ${absConfigPath} (set via CREWX_CONFIG)`);
41
- }
42
- else {
43
- yamlPath = undefined;
44
- }
45
- const skipRoot = yamlPath !== undefined ? (0, path_1.dirname)(absConfigPath) : undefined;
46
- // Run drizzle migrations once at bootstrap — plugin relies on this guarantee.
47
- const dbPath = process.env.CREWX_DB || (0, path_1.join)((0, os_1.homedir)(), '.crewx', 'crewx.db');
48
- (0, fs_1.mkdirSync)((0, path_1.dirname)(dbPath), { recursive: true });
49
- const handle = (0, repository_1.openDrizzleDb)(dbPath);
50
- try {
51
- (0, repository_1.runMigrations)(handle.db);
52
- }
53
- finally {
54
- handle.close();
55
- }
56
- const crewx = await sdk_1.Crewx.loadYaml(yamlPath, {
57
- remoteFactory: createCliCrewx,
58
- inheritWorktreeOwner: true,
59
- additionalArgsProvider: (0, codex_writable_roots_1.composeAdditionalArgsProviders)((0, codex_writable_roots_1.createCodexWritableRootsProvider)(), (0, codex_writable_roots_1.createCodexSkipGitRepoCheckProvider)(skipRoot)),
60
- });
61
- (0, register_builtin_tools_1.registerBuiltinToolsIfNeeded)(crewx);
62
- crewx.registerPromptListProvider(sdk_1.Crewx.createAgentListPromptResolver(yamlPath));
63
- crewx.registerPromptListProvider((0, list_1.createWorkflowListPromptResolver)(yamlPath));
64
- await crewx.use(new plugins_1.ConversationPlugin({ dbPath }));
65
- await crewx.use(new plugins_1.FileLoggerPlugin({ version: version_1.CLI_VERSION, workspaceRoot }));
66
- await crewx.use(new plugins_1.SqliteTracingPlugin({
67
- version: version_1.CLI_VERSION,
68
- runnerIdentity: (0, inherited_trace_1.consumeInheritedRunnerIdentity)(),
69
- inheritWorktreeOwner: true,
70
- }));
71
- const projectRoot = yamlPath !== undefined ? (0, path_1.dirname)(yamlPath) : workspaceRoot;
72
- const normalizedProjectRoot = (0, sdk_1.normalizeWorkspacePath)(projectRoot);
73
- const ownerPath = (0, sdk_1.resolveWorkspaceOwnerPath)(projectRoot);
74
- if (ownerPath !== normalizedProjectRoot
75
- && ((0, fs_1.existsSync)((0, path_1.join)(ownerPath, 'crewx.yaml')) || (0, fs_1.existsSync)((0, path_1.join)(ownerPath, 'crewx.yml')))) {
76
- try {
77
- new repository_1.WorkspaceRepository().registerWorkspace(ownerPath);
78
- }
79
- catch {
80
- // Workspace registration is visibility support; never make CLI execution fatal.
81
- }
82
- }
83
- return crewx;
84
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createCliCrewx=C;const n=require("fs");const o=require("path");const x=require("os");const s=require("@crewx/sdk");const y=require("@crewx/workflow/list");const a=require("@crewx/sdk/plugins");const l=require("@crewx/sdk/repository");const h=require("../register-builtin-tools");const _=require("../utils/version");const R=require("../utils/inherited-trace");const d=require("./codex-writable-roots");async function C(P=process.env.CREWX_CONFIG??"crewx.yaml"){const t=(0,o.resolve)(P);const u=process.cwd();const v=Boolean(process.env.CREWX_CONFIG);const f=(0,n.existsSync)(t);let e;if(f){e=t}else if(v){throw new Error(`[crewx] Config file not found: ${t} (set via CREWX_CONFIG)`)}else{e=void 0}const g=e!==void 0?(0,o.dirname)(t):void 0;const c=process.env.CREWX_DB||(0,o.join)((0,x.homedir)(),".crewx","crewx.db");(0,n.mkdirSync)((0,o.dirname)(c),{recursive:true});const w=(0,l.openDrizzleDb)(c);try{(0,l.runMigrations)(w.db)}finally{w.close()}const r=await s.Crewx.loadYaml(e,{remoteFactory:C,inheritWorktreeOwner:true,additionalArgsProvider:(0,d.composeAdditionalArgsProviders)((0,d.createCodexWritableRootsProvider)(),(0,d.createCodexSkipGitRepoCheckProvider)(g))});(0,h.registerBuiltinToolsIfNeeded)(r);r.registerPromptListProvider(s.Crewx.createAgentListPromptResolver(e));r.registerPromptListProvider((0,y.createWorkflowListPromptResolver)(e));await r.use(new a.ConversationPlugin({dbPath:c}));await r.use(new a.FileLoggerPlugin({version:_.CLI_VERSION,workspaceRoot:u}));await r.use(new a.SqliteTracingPlugin({version:_.CLI_VERSION,runnerIdentity:(0,R.consumeInheritedRunnerIdentity)(),inheritWorktreeOwner:true}));const p=e!==void 0?(0,o.dirname)(e):u;const m=(0,s.normalizeWorkspacePath)(p);const i=(0,s.resolveWorkspaceOwnerPath)(p);if(i!==m&&((0,n.existsSync)((0,o.join)(i,"crewx.yaml"))||(0,n.existsSync)((0,o.join)(i,"crewx.yml")))){try{new l.WorkspaceRepository().registerWorkspace(i)}catch{}}return r}
package/dist/builtin.js CHANGED
@@ -1,132 +1,5 @@
1
- "use strict";
2
- /**
3
- * Built-in tool router.
4
- *
5
- * Routes built-in commands (memory, search, doc, etc.) to their respective
6
- * @crewx/* package CLI entry points.
7
- *
8
- * Copied and adapted from packages/cli-bak/src/cli/builtin.handler.ts.
9
- */
10
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- var desc = Object.getOwnPropertyDescriptor(m, k);
13
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
- desc = { enumerable: true, get: function() { return m[k]; } };
15
- }
16
- Object.defineProperty(o, k2, desc);
17
- }) : (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- o[k2] = m[k];
20
- }));
21
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
- Object.defineProperty(o, "default", { enumerable: true, value: v });
23
- }) : function(o, v) {
24
- o["default"] = v;
25
- });
26
- var __importStar = (this && this.__importStar) || (function () {
27
- var ownKeys = function(o) {
28
- ownKeys = Object.getOwnPropertyNames || function (o) {
29
- var ar = [];
30
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
- return ar;
32
- };
33
- return ownKeys(o);
34
- };
35
- return function (mod) {
36
- if (mod && mod.__esModule) return mod;
37
- var result = {};
38
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
- __setModuleDefault(result, mod);
40
- return result;
41
- };
42
- })();
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.BUILTIN_COMMANDS = void 0;
45
- exports.wrapWithTracer = wrapWithTracer;
46
- exports.handleBuiltin = handleBuiltin;
47
- const BUILTIN_MAP = {
48
- memory: () => Promise.resolve().then(() => __importStar(require('@crewx/memory/cli'))),
49
- search: () => Promise.resolve().then(() => __importStar(require('@crewx/search/cli'))),
50
- doc: () => Promise.resolve().then(() => __importStar(require('@crewx/doc/cli'))),
51
- wbs: () => Promise.resolve().then(() => __importStar(require('@crewx/wbs/cli'))),
52
- cron: () => Promise.resolve().then(() => __importStar(require('@crewx/cron/cli'))),
53
- workflow: () => Promise.resolve().then(() => __importStar(require('@crewx/workflow/cli'))),
54
- skill: () => Promise.resolve().then(() => __importStar(require('@crewx/skill/cli'))),
55
- dreaming: () => Promise.resolve().then(() => __importStar(require('@crewx/dreaming/cli'))),
56
- wi: () => Promise.resolve().then(() => __importStar(require('@crewx/wi/cli'))),
57
- chromex: () => Promise.resolve().then(() => __importStar(require('@crewx/chromex/cli'))),
58
- notify: () => Promise.resolve().then(() => __importStar(require('@crewx/notify/cli'))),
59
- app: () => Promise.resolve().then(() => __importStar(require('@crewx/app/cli'))),
60
- };
61
- exports.BUILTIN_COMMANDS = new Set(Object.keys(BUILTIN_MAP));
62
- // Load skill-tracer for observability (graceful degradation if unavailable)
63
- async function loadTracer() {
64
- try {
65
- return await Promise.resolve().then(() => __importStar(require('@crewx/shared/skill-tracer')));
66
- }
67
- catch {
68
- return null;
69
- }
70
- }
71
- /**
72
- * Wrap main() with tracer.run() if tracer is available.
73
- * Falls back to direct main() call on any tracer failure.
74
- */
75
- async function wrapWithTracer(builtinName, main, args) {
76
- let tracer = null;
77
- try {
78
- tracer = await loadTracer();
79
- }
80
- catch {
81
- // tracer unavailable — proceed without it
82
- }
83
- if (tracer) {
84
- let mainError = null;
85
- let mainCompleted = false;
86
- try {
87
- await tracer.run(`crewx/${builtinName}`, async () => {
88
- try {
89
- await main(args);
90
- mainCompleted = true;
91
- }
92
- catch (err) {
93
- mainError = err;
94
- throw err;
95
- }
96
- });
97
- return;
98
- }
99
- catch {
100
- if (mainError)
101
- throw mainError;
102
- if (mainCompleted)
103
- return;
104
- // tracer setup error — fall back
105
- }
106
- }
107
- await main(args);
108
- }
109
- async function handleBuiltin(builtinName, args, productPackageRoot) {
110
- const loader = BUILTIN_MAP[builtinName];
111
- if (!loader) {
112
- console.error(`Unknown built-in tool: ${builtinName}`);
113
- process.exit(1);
114
- }
115
- try {
116
- const mod = await loader();
117
- const main = builtinName === 'skill'
118
- ? (skillArgs) => mod.main(skillArgs, { productPackageRoot })
119
- : mod.main.bind(mod);
120
- await wrapWithTracer(builtinName, main, args);
121
- }
122
- catch (err) {
123
- const code = err.code;
124
- if (code === 'MODULE_NOT_FOUND' || code === 'ERR_MODULE_NOT_FOUND') {
125
- console.error(`\n Built-in tool '${builtinName}' is not installed.\n`);
126
- console.error(` Install it with:\n`);
127
- console.error(` npm install @crewx/${builtinName}\n`);
128
- process.exit(1);
129
- }
130
- throw err;
131
- }
132
- }
1
+ "use strict";var u=exports&&exports.__createBinding||(Object.create?(function(n,r,i,t){if(t===void 0)t=i;var e=Object.getOwnPropertyDescriptor(r,i);if(!e||("get"in e?!r.__esModule:e.writable||e.configurable)){e={enumerable:true,get:function(){return r[i]}}}Object.defineProperty(n,t,e)}):(function(n,r,i,t){if(t===void 0)t=i;n[t]=r[i]}));var f=exports&&exports.__setModuleDefault||(Object.create?(function(n,r){Object.defineProperty(n,"default",{enumerable:true,value:r})}):function(n,r){n["default"]=r});var o=exports&&exports.__importStar||(function(){var n=function(r){n=Object.getOwnPropertyNames||function(i){var t=[];for(var e in i)if(Object.prototype.hasOwnProperty.call(i,e))t[t.length]=e;return t};return n(r)};return function(r){if(r&&r.__esModule)return r;var i={};if(r!=null){for(var t=n(r),e=0;e<t.length;e++)if(t[e]!=="default")u(i,r,t[e])}f(i,r);return i}})();Object.defineProperty(exports,"__esModule",{value:true});exports.BUILTIN_COMMANDS=void 0;exports.wrapWithTracer=s;exports.handleBuiltin=w;const l={memory:()=>Promise.resolve().then(()=>o(require("@crewx/memory/cli"))),search:()=>Promise.resolve().then(()=>o(require("@crewx/search/cli"))),doc:()=>Promise.resolve().then(()=>o(require("@crewx/doc/cli"))),wbs:()=>Promise.resolve().then(()=>o(require("@crewx/wbs/cli"))),cron:()=>Promise.resolve().then(()=>o(require("@crewx/cron/cli"))),workflow:()=>Promise.resolve().then(()=>o(require("@crewx/workflow/cli"))),skill:()=>Promise.resolve().then(()=>o(require("@crewx/skill/cli"))),dreaming:()=>Promise.resolve().then(()=>o(require("@crewx/dreaming/cli"))),wi:()=>Promise.resolve().then(()=>o(require("@crewx/wi/cli"))),chromex:()=>Promise.resolve().then(()=>o(require("@crewx/chromex/cli"))),notify:()=>Promise.resolve().then(()=>o(require("@crewx/notify/cli"))),app:()=>Promise.resolve().then(()=>o(require("@crewx/app/cli")))};exports.BUILTIN_COMMANDS=new Set(Object.keys(l));async function h(){try{return await Promise.resolve().then(()=>o(require("@crewx/shared/skill-tracer")))}catch{return null}}async function s(n,r,i){let t=null;try{t=await h()}catch{}if(t){let e=null;let a=false;try{await t.run(`crewx/${n}`,async()=>{try{await r(i);a=true}catch(c){e=c;throw c}});return}catch{if(e)throw e;if(a)return}}await r(i)}async function w(n,r,i){const t=l[n];if(!t){console.error(`Unknown built-in tool: ${n}`);process.exit(1)}try{const e=await t();const a=n==="skill"?c=>e.main(c,{productPackageRoot:i}):e.main.bind(e);await s(n,a,r)}catch(e){const a=e.code;if(a==="MODULE_NOT_FOUND"||a==="ERR_MODULE_NOT_FOUND"){console.error(`
2
+ Built-in tool '${n}' is not installed.
3
+ `);console.error(` Install it with:
4
+ `);console.error(` npm install @crewx/${n}
5
+ `);process.exit(1)}throw e}}
@@ -1,119 +1,6 @@
1
- "use strict";
2
- /**
3
- * crewx agent handler.
4
- * Dispatches `crewx agent ls` and `crewx agent prompt` subcommands.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.handleAgent = handleAgent;
8
- const fs_1 = require("fs");
9
- const crewx_cli_1 = require("../bootstrap/crewx-cli");
10
- const sdk_1 = require("@crewx/sdk");
11
- /**
12
- * Parse a flag from args array.
13
- * Supports both `--flag=value` and `--flag value` forms.
14
- * Returns undefined if flag is not present.
15
- */
16
- function parseFlag(args, flag) {
17
- const prefix = `--${flag}=`;
18
- for (let i = 0; i < args.length; i++) {
19
- if (args[i].startsWith(prefix)) {
20
- return args[i].slice(prefix.length);
21
- }
22
- if (args[i] === `--${flag}` && i + 1 < args.length) {
23
- return args[i + 1];
24
- }
25
- }
26
- return undefined;
27
- }
28
- function printAgentList(agents, total, isFiltered) {
29
- console.log((0, sdk_1.formatAgentList)({ agents, total, isFiltered, configPath: process.env.CREWX_CONFIG ?? null }));
30
- }
31
- /**
32
- * Handle `crewx agent ls` — list agents with optional filters.
33
- */
34
- async function handleAgentList(crewx, args) {
35
- const role = parseFlag(args, 'role');
36
- const team = parseFlag(args, 'team');
37
- const provider = parseFlag(args, 'provider');
38
- const isFiltered = !!(role || team || provider);
39
- const total = crewx.agents.size;
40
- const filtered = crewx.filterAgents({ role, team, provider });
41
- printAgentList(filtered, total, isFiltered);
42
- }
43
- /**
44
- * Handle `crewx agent prompt <agentId>` — print fully rendered system prompt.
45
- * Renders Handlebars template variables via Crewx.renderAgentPromptFull().
46
- */
47
- async function handleAgentPrompt(crewx, args) {
48
- // Find the agent id argument (first non-flag arg after 'prompt')
49
- const agentIdRaw = args.find(a => !a.startsWith('--'));
50
- if (!agentIdRaw) {
51
- console.error('Missing agent ID. Usage: crewx agent prompt @agent_name');
52
- process.exit(1);
53
- }
54
- try {
55
- const rendered = await crewx.renderAgentPromptFull(agentIdRaw, {
56
- env: process.env,
57
- session: { mode: 'query', platform: 'cli' },
58
- });
59
- const displayId = agentIdRaw.startsWith('@') ? agentIdRaw.slice(1) : agentIdRaw;
60
- console.log(`\n🤖 **Rendered Prompt for Agent: ${displayId}**\n`);
61
- console.log('--- BEGIN PROMPT ---');
62
- console.log(rendered);
63
- console.log('--- END PROMPT ---');
64
- }
65
- catch (err) {
66
- const message = err instanceof Error ? err.message : String(err);
67
- console.error(`Failed to get agent prompt: ${message}`);
68
- process.exit(1);
69
- }
70
- }
71
- /**
72
- * Handle `crewx agent [subcommand] [options]`.
73
- *
74
- * Subcommands:
75
- * ls | list | (none) — list agents (default)
76
- * prompt <agentId> — print rendered system prompt
77
- */
78
- async function handleAgent(args) {
79
- const configPath = process.env.CREWX_CONFIG ?? 'crewx.yaml';
80
- let crewx;
81
- try {
82
- crewx = await (0, crewx_cli_1.createCliCrewx)(configPath);
83
- }
84
- catch (err) {
85
- if (err instanceof sdk_1.ConfigLoadError && !(0, fs_1.existsSync)(configPath)) {
86
- const subcommand = (args[0] ?? '').toLowerCase();
87
- if (!subcommand || subcommand === 'ls' || subcommand === 'list') {
88
- console.log('WARNING: No agents configured.');
89
- console.log(`No crewx.yaml found. Run 'crewx init' to create one.`);
90
- return;
91
- }
92
- }
93
- throw err;
94
- }
95
- const subcommand = (args[0] ?? '').toLowerCase();
96
- switch (subcommand) {
97
- case 'ls':
98
- case 'list':
99
- await handleAgentList(crewx, args.slice(1));
100
- return;
101
- case '':
102
- // Default: no subcommand → ls
103
- await handleAgentList(crewx, args.slice(1));
104
- return;
105
- case 'prompt':
106
- case 'p':
107
- await handleAgentPrompt(crewx, args.slice(1));
108
- return;
109
- default:
110
- console.error(`Unknown agent subcommand: ${subcommand}`);
111
- printAgentHelp();
112
- process.exit(1);
113
- }
114
- }
115
- function printAgentHelp() {
116
- console.log(`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.handleAgent=f;const d=require("fs");const p=require("../bootstrap/crewx-cli");const c=require("@crewx/sdk");function a(t,r){const n=`--${r}=`;for(let e=0;e<t.length;e++){if(t[e].startsWith(n)){return t[e].slice(n.length)}if(t[e]===`--${r}`&&e+1<t.length){return t[e+1]}}return void 0}function u(t,r,n){console.log((0,c.formatAgentList)({agents:t,total:r,isFiltered:n,configPath:process.env.CREWX_CONFIG??null}))}async function l(t,r){const n=a(r,"role");const e=a(r,"team");const o=a(r,"provider");const s=!!(n||e||o);const i=t.agents.size;const g=t.filterAgents({role:n,team:e,provider:o});u(g,i,s)}async function m(t,r){const n=r.find(e=>!e.startsWith("--"));if(!n){console.error("Missing agent ID. Usage: crewx agent prompt @agent_name");process.exit(1)}try{const e=await t.renderAgentPromptFull(n,{env:process.env,session:{mode:"query",platform:"cli"}});const o=n.startsWith("@")?n.slice(1):n;console.log(`
2
+ \u{1F916} **Rendered Prompt for Agent: ${o}**
3
+ `);console.log("--- BEGIN PROMPT ---");console.log(e);console.log("--- END PROMPT ---")}catch(e){const o=e instanceof Error?e.message:String(e);console.error(`Failed to get agent prompt: ${o}`);process.exit(1)}}async function f(t){const r=process.env.CREWX_CONFIG??"crewx.yaml";let n;try{n=await(0,p.createCliCrewx)(r)}catch(o){if(o instanceof c.ConfigLoadError&&!(0,d.existsSync)(r)){const s=(t[0]??"").toLowerCase();if(!s||s==="ls"||s==="list"){console.log("WARNING: No agents configured.");console.log(`No crewx.yaml found. Run 'crewx init' to create one.`);return}}throw o}const e=(t[0]??"").toLowerCase();switch(e){case"ls":case"list":await l(n,t.slice(1));return;case"":await l(n,t.slice(1));return;case"prompt":case"p":await m(n,t.slice(1));return;default:console.error(`Unknown agent subcommand: ${e}`);w();process.exit(1)}}function w(){console.log(`
117
4
  CrewX Agent Management
118
5
 
119
6
  Usage:
@@ -136,5 +23,4 @@ Examples:
136
23
  crewx agent ls --role=PM --provider=claude
137
24
  crewx agent ls --role=PM,general
138
25
  CREWX_CONFIG=./crewx.yaml crewx agent list
139
- `.trim());
140
- }
26
+ `.trim())}
@@ -1,44 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WAIT_LADDER_SECONDS = void 0;
4
- exports.suggestWaitSeconds = suggestWaitSeconds;
5
- exports.writeCalFooter = writeCalFooter;
6
- const knowledge_core_1 = require("@crewx/knowledge-core");
7
- /** Suggested wait rungs in seconds. 540 is the safe caller-harness cap. */
8
- exports.WAIT_LADDER_SECONDS = [60, 300, 540];
9
- function toTimestamp(value) {
10
- if (value instanceof Date) {
11
- return Number.isFinite(value.getTime()) ? value.getTime() : undefined;
12
- }
13
- if (typeof value === 'number') {
14
- return Number.isFinite(value) ? value : undefined;
15
- }
16
- if (typeof value === 'string') {
17
- const timestamp = Date.parse(value);
18
- return Number.isFinite(timestamp) ? timestamp : undefined;
19
- }
20
- return undefined;
21
- }
22
- /**
23
- * Select the next safe result wait based on task runtime without stepping
24
- * down from the wait value the caller just used.
25
- */
26
- function suggestWaitSeconds(options) {
27
- const now = Number.isFinite(options.now) ? options.now : Date.now();
28
- const startedAt = toTimestamp(options.startedAt);
29
- const elapsedSeconds = startedAt === undefined
30
- ? 0
31
- : Math.max(0, (now - startedAt) / 1000);
32
- const rung = exports.WAIT_LADDER_SECONDS.find(seconds => seconds > elapsedSeconds)
33
- ?? exports.WAIT_LADDER_SECONDS[exports.WAIT_LADDER_SECONDS.length - 1];
34
- const lastWaitSeconds = Number.isFinite(options.lastWaitSeconds)
35
- ? Math.max(0, options.lastWaitSeconds)
36
- : 0;
37
- return Math.min(exports.WAIT_LADDER_SECONDS[exports.WAIT_LADDER_SECONDS.length - 1], Math.max(rung, lastWaitSeconds));
38
- }
39
- /** Write a human-only CAL footer without contaminating command stdout. */
40
- function writeCalFooter(context) {
41
- const block = (0, knowledge_core_1.formatActions)((0, knowledge_core_1.generateNextActions)(context));
42
- if (block)
43
- process.stderr.write(`${block}\n`);
44
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.WAIT_LADDER_SECONDS=void 0;exports.suggestWaitSeconds=D;exports.writeCalFooter=a;const i=require("@crewx/knowledge-core");exports.WAIT_LADDER_SECONDS=[60,300,540];function d(e){if(e instanceof Date){return Number.isFinite(e.getTime())?e.getTime():void 0}if(typeof e==="number"){return Number.isFinite(e)?e:void 0}if(typeof e==="string"){const t=Date.parse(e);return Number.isFinite(t)?t:void 0}return void 0}function D(e){const t=Number.isFinite(e.now)?e.now:Date.now();const n=d(e.startedAt);const r=n===void 0?0:Math.max(0,(t-n)/1e3);const s=exports.WAIT_LADDER_SECONDS.find(c=>c>r)??exports.WAIT_LADDER_SECONDS[exports.WAIT_LADDER_SECONDS.length-1];const o=Number.isFinite(e.lastWaitSeconds)?Math.max(0,e.lastWaitSeconds):0;return Math.min(exports.WAIT_LADDER_SECONDS[exports.WAIT_LADDER_SECONDS.length-1],Math.max(s,o))}function a(e){const t=(0,i.formatActions)((0,i.generateNextActions)(e));if(t)process.stderr.write(`${t}
2
+ `)}