@agenticmail/enterprise 0.5.431 → 0.5.433
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/dist/cli-agent-OK6CWVRS.js +2715 -0
- package/dist/cli-build-skill-IONLZD77.js +1483 -0
- package/dist/cli-submit-skill-S7UMEPH5.js +169 -0
- package/dist/cli.js +3 -3
- package/dist/dashboard/pages/settings.js +2 -2
- package/logs/cloudflared-error.log +19 -0
- package/logs/john-error.log +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_skill_validator,
|
|
3
|
+
validateSkillManifest
|
|
4
|
+
} from "./chunk-22U7TZPN.js";
|
|
5
|
+
import "./chunk-KFQGP6VL.js";
|
|
6
|
+
|
|
7
|
+
// src/engine/cli-submit-skill.ts
|
|
8
|
+
init_skill_validator();
|
|
9
|
+
var UPSTREAM_REPO = "agenticmail/enterprise";
|
|
10
|
+
async function runSubmitSkill(args) {
|
|
11
|
+
const chalk = (await import("chalk")).default;
|
|
12
|
+
const ora = (await import("ora")).default;
|
|
13
|
+
const { execSync } = await import("child_process");
|
|
14
|
+
const fs = await import("fs/promises");
|
|
15
|
+
const path = await import("path");
|
|
16
|
+
const target = args.filter((a) => !a.startsWith("--"))[0];
|
|
17
|
+
if (!target) {
|
|
18
|
+
console.log(`${chalk.bold("Usage:")} npx @agenticmail/enterprise submit-skill <path-to-skill-dir>`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const skillDir = path.resolve(target);
|
|
23
|
+
console.log("");
|
|
24
|
+
console.log(chalk.bold("\u{1F680} Submit Community Skill"));
|
|
25
|
+
console.log("");
|
|
26
|
+
const spinner = ora("Checking prerequisites...").start();
|
|
27
|
+
try {
|
|
28
|
+
execSync("gh --version", { stdio: "pipe" });
|
|
29
|
+
} catch {
|
|
30
|
+
spinner.fail("GitHub CLI (gh) is not installed");
|
|
31
|
+
console.log("");
|
|
32
|
+
console.log(chalk.dim(" Install it from: https://cli.github.com/"));
|
|
33
|
+
console.log(chalk.dim(" Then run: gh auth login"));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
execSync("gh auth status", { stdio: "pipe" });
|
|
39
|
+
} catch {
|
|
40
|
+
spinner.fail("Not authenticated with GitHub CLI");
|
|
41
|
+
console.log(chalk.dim(" Run: gh auth login"));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
spinner.succeed("GitHub CLI authenticated");
|
|
46
|
+
const validateSpinner = ora("Validating skill manifest...").start();
|
|
47
|
+
const manifestPath = path.join(skillDir, "agenticmail-skill.json");
|
|
48
|
+
let manifest;
|
|
49
|
+
try {
|
|
50
|
+
const raw = await fs.readFile(manifestPath, "utf-8");
|
|
51
|
+
manifest = JSON.parse(raw);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
validateSpinner.fail(`Cannot read manifest: ${err.message}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const validation = validateSkillManifest(manifest);
|
|
58
|
+
if (!validation.valid) {
|
|
59
|
+
validateSpinner.fail("Manifest validation failed");
|
|
60
|
+
for (const err of validation.errors) {
|
|
61
|
+
console.log(chalk.red(" \u2502 " + err));
|
|
62
|
+
}
|
|
63
|
+
console.log(chalk.dim("\n Fix the errors above and try again."));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
validateSpinner.succeed(`Manifest valid: ${manifest.name} v${manifest.version}`);
|
|
68
|
+
const skillId = manifest.id;
|
|
69
|
+
const branchName = `community/add-${skillId}`;
|
|
70
|
+
const forkSpinner = ora("Forking repository...").start();
|
|
71
|
+
try {
|
|
72
|
+
execSync(`gh repo fork ${UPSTREAM_REPO} --clone=false 2>&1 || true`, { stdio: "pipe" });
|
|
73
|
+
forkSpinner.succeed("Repository forked (or already exists)");
|
|
74
|
+
} catch {
|
|
75
|
+
forkSpinner.succeed("Fork exists");
|
|
76
|
+
}
|
|
77
|
+
let forkUrl;
|
|
78
|
+
try {
|
|
79
|
+
const ghUser = execSync("gh api user --jq .login", { encoding: "utf-8" }).trim();
|
|
80
|
+
forkUrl = `https://github.com/${ghUser}/enterprise.git`;
|
|
81
|
+
} catch {
|
|
82
|
+
forkSpinner.fail("Cannot determine GitHub username");
|
|
83
|
+
process.exit(1);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const tmpDir = path.join(process.env.TMPDIR || "/tmp", `agenticmail-submit-${Date.now()}`);
|
|
87
|
+
const pushSpinner = ora("Cloning fork...").start();
|
|
88
|
+
try {
|
|
89
|
+
execSync(`git clone --depth 1 ${forkUrl} "${tmpDir}"`, { stdio: "pipe" });
|
|
90
|
+
pushSpinner.text = "Creating branch...";
|
|
91
|
+
const run = (cmd) => execSync(cmd, { cwd: tmpDir, stdio: "pipe", encoding: "utf-8" });
|
|
92
|
+
run(`git remote add upstream https://github.com/${UPSTREAM_REPO}.git`);
|
|
93
|
+
run("git fetch upstream main --depth 1");
|
|
94
|
+
run(`git checkout -b ${branchName} upstream/main`);
|
|
95
|
+
pushSpinner.text = "Copying skill files...";
|
|
96
|
+
const destDir = path.join(tmpDir, "community-skills", skillId);
|
|
97
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
98
|
+
const SKILL_FILES = /* @__PURE__ */ new Set(["agenticmail-skill.json", "README.md", "types.d.ts", "CHANGELOG.md", "LICENSE"]);
|
|
99
|
+
const files = await fs.readdir(skillDir);
|
|
100
|
+
for (const file of files) {
|
|
101
|
+
const srcPath = path.join(skillDir, file);
|
|
102
|
+
const stat = await fs.lstat(srcPath);
|
|
103
|
+
if (!stat.isFile()) continue;
|
|
104
|
+
if (!SKILL_FILES.has(file)) continue;
|
|
105
|
+
await fs.copyFile(srcPath, path.join(destDir, file));
|
|
106
|
+
}
|
|
107
|
+
pushSpinner.text = "Committing...";
|
|
108
|
+
run(`git add community-skills/${skillId}/`);
|
|
109
|
+
run(`git commit -m "Add community skill: ${manifest.name}"`);
|
|
110
|
+
pushSpinner.text = "Pushing to fork...";
|
|
111
|
+
run(`git push origin ${branchName} --force`);
|
|
112
|
+
pushSpinner.succeed("Pushed to fork");
|
|
113
|
+
} catch (err) {
|
|
114
|
+
pushSpinner.fail(`Git operation failed: ${err.message}`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const prSpinner = ora("Opening pull request...").start();
|
|
119
|
+
const toolsList = (manifest.tools || []).map(
|
|
120
|
+
(t) => `- \`${t.id}\` \u2014 ${t.name}: ${t.description}`
|
|
121
|
+
).join("\n");
|
|
122
|
+
const prBody = `## Community Skill Submission
|
|
123
|
+
|
|
124
|
+
**Skill ID:** \`${manifest.id}\`
|
|
125
|
+
**Application:** ${manifest.name}
|
|
126
|
+
**Category:** ${manifest.category}
|
|
127
|
+
**Risk Level:** ${manifest.risk}
|
|
128
|
+
**Author:** @${manifest.author}
|
|
129
|
+
**License:** ${manifest.license}
|
|
130
|
+
|
|
131
|
+
### Description
|
|
132
|
+
|
|
133
|
+
${manifest.description}
|
|
134
|
+
|
|
135
|
+
### Tools Provided
|
|
136
|
+
|
|
137
|
+
${toolsList}
|
|
138
|
+
|
|
139
|
+
### Validation
|
|
140
|
+
|
|
141
|
+
- [x] Manifest passes \`npx @agenticmail/enterprise validate\`
|
|
142
|
+
- [x] All required fields present
|
|
143
|
+
- [x] No duplicate tool IDs
|
|
144
|
+
${manifest.tags ? `
|
|
145
|
+
**Tags:** ${manifest.tags.join(", ")}` : ""}`;
|
|
146
|
+
try {
|
|
147
|
+
const prUrl = execSync(
|
|
148
|
+
`gh pr create --repo ${UPSTREAM_REPO} --head ${branchName} --title "Add community skill: ${manifest.name}" --body "${prBody.replace(/"/g, '\\"')}"`,
|
|
149
|
+
{ cwd: tmpDir, encoding: "utf-8", stdio: "pipe" }
|
|
150
|
+
).trim();
|
|
151
|
+
prSpinner.succeed("Pull request opened!");
|
|
152
|
+
console.log(chalk.green(`
|
|
153
|
+
${prUrl}
|
|
154
|
+
`));
|
|
155
|
+
} catch (err) {
|
|
156
|
+
if (err.stderr?.includes("already exists")) {
|
|
157
|
+
prSpinner.warn("A PR for this skill already exists");
|
|
158
|
+
} else {
|
|
159
|
+
prSpinner.fail(`Could not open PR: ${err.message}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
164
|
+
} catch {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export {
|
|
168
|
+
runSubmitSkill
|
|
169
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -8,10 +8,10 @@ switch (command) {
|
|
|
8
8
|
import("./cli-validate-3PO5OZGB.js").then((m) => m.runValidate(args.slice(1))).catch(fatal);
|
|
9
9
|
break;
|
|
10
10
|
case "build-skill":
|
|
11
|
-
import("./cli-build-skill-
|
|
11
|
+
import("./cli-build-skill-IONLZD77.js").then((m) => m.runBuildSkill(args.slice(1))).catch(fatal);
|
|
12
12
|
break;
|
|
13
13
|
case "submit-skill":
|
|
14
|
-
import("./cli-submit-skill-
|
|
14
|
+
import("./cli-submit-skill-S7UMEPH5.js").then((m) => m.runSubmitSkill(args.slice(1))).catch(fatal);
|
|
15
15
|
break;
|
|
16
16
|
case "recover":
|
|
17
17
|
import("./cli-recover-HGWHKH6N.js").then((m) => m.runRecover(args.slice(1))).catch(fatal);
|
|
@@ -68,7 +68,7 @@ Skill Development:
|
|
|
68
68
|
import("./cli-serve-W5PERLNJ.js").then((m) => m.runServe(args.slice(1))).catch(fatal);
|
|
69
69
|
break;
|
|
70
70
|
case "agent":
|
|
71
|
-
import("./cli-agent-
|
|
71
|
+
import("./cli-agent-OK6CWVRS.js").then((m) => m.runAgent(args.slice(1))).catch(fatal);
|
|
72
72
|
break;
|
|
73
73
|
case "setup":
|
|
74
74
|
default:
|
|
@@ -2700,8 +2700,8 @@ function LLMProvidersTab(props) {
|
|
|
2700
2700
|
),
|
|
2701
2701
|
h('button', {
|
|
2702
2702
|
className: 'btn btn-ghost btn-sm',
|
|
2703
|
-
onClick: function() { setApiKeyInputs(function(s) { return Object.assign({}, s, { [p.id]: s[p.id]
|
|
2704
|
-
}, apiKeyInputs[p.id]
|
|
2703
|
+
onClick: function() { setApiKeyInputs(function(s) { return Object.assign({}, s, { [p.id]: s[p.id] == null ? '' : null }); }); }
|
|
2704
|
+
}, apiKeyInputs[p.id] != null ? 'Cancel' : 'Update Key'),
|
|
2705
2705
|
typeof apiKeyInputs[p.id] === 'string' && apiKeyInputs[p.id] !== null && h('div', { style: { display: 'flex', gap: 8, marginLeft: 8 } },
|
|
2706
2706
|
h('input', { className: 'input', type: 'password', value: apiKeyInputs[p.id], onChange: function(e) { setApiKeyInputs(function(s) { return Object.assign({}, s, { [p.id]: e.target.value }); }); }, placeholder: meta.placeholder || 'New API key', style: { width: 240, fontSize: 13 } }),
|
|
2707
2707
|
h('button', { className: 'btn btn-primary btn-sm', disabled: saving[p.id], onClick: function() { saveKey(p.id, p.name); } }, saving[p.id] ? (savingMsg[p.id] || 'Saving...') : 'Save')
|
|
@@ -1,2 +1,21 @@
|
|
|
1
1
|
2026-03-07 00:05:55: 2026-03-06T23:05:55Z ERR error="stream 8745 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
2
2
|
2026-03-07 00:05:55: 2026-03-06T23:05:55Z ERR Request failed error="stream 8745 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/agent-status-stream event=0 ip=198.41.192.47 type=http
|
|
3
|
+
2026-03-07 00:24:20: 2026-03-06T23:24:20Z ERR error="stream 8765 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
4
|
+
2026-03-07 00:24:20: 2026-03-06T23:24:20Z ERR Request failed error="stream 8765 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/task-pipeline/stream event=0 ip=198.41.192.47 type=http
|
|
5
|
+
2026-03-07 00:24:21: 2026-03-06T23:24:21Z ERR error="unexpected EOF" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
6
|
+
2026-03-07 00:24:21: 2026-03-06T23:24:21Z ERR Request failed error="unexpected EOF" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/task-pipeline/stream event=0 ip=198.41.192.47 type=http
|
|
7
|
+
2026-03-07 01:02:48: 2026-03-07T00:02:48Z ERR error="stream 9089 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
8
|
+
2026-03-07 01:02:48: 2026-03-07T00:02:48Z ERR Request failed error="stream 9089 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/task-pipeline/stream event=0 ip=198.41.192.47 type=http
|
|
9
|
+
2026-03-07 01:02:49: 2026-03-07T00:02:49Z ERR error="unexpected EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:3100
|
|
10
|
+
2026-03-07 01:02:49: 2026-03-07T00:02:49Z ERR Request failed error="unexpected EOF" connIndex=0 dest=https://enterprise.agenticmail.io/api/engine/task-pipeline/stream event=0 ip=198.41.200.43 type=http
|
|
11
|
+
2026-03-07 03:29:37: 2026-03-07T02:29:37Z ERR update check failed error="no release found"
|
|
12
|
+
2026-03-07 03:36:24: 2026-03-07T02:36:24Z ERR error="stream 9377 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
13
|
+
2026-03-07 03:36:24: 2026-03-07T02:36:24Z ERR error="stream 9645 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
14
|
+
2026-03-07 03:36:24: 2026-03-07T02:36:24Z ERR Request failed error="stream 9377 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/agent-status-stream event=0 ip=198.41.192.47 type=http
|
|
15
|
+
2026-03-07 03:36:24: 2026-03-07T02:36:24Z ERR Request failed error="stream 9645 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/agent-status-stream event=0 ip=198.41.192.47 type=http
|
|
16
|
+
2026-03-07 03:36:53: 2026-03-07T02:36:53Z ERR error="stream 4753 canceled by remote with error code 0" connIndex=0 event=1 ingressRule=0 originService=http://localhost:3100
|
|
17
|
+
2026-03-07 03:36:53: 2026-03-07T02:36:53Z ERR Request failed error="stream 4753 canceled by remote with error code 0" connIndex=0 dest=https://enterprise.agenticmail.io/api/engine/task-pipeline/stream event=0 ip=198.41.200.43 type=http
|
|
18
|
+
2026-03-07 04:07:24: 2026-03-07T03:07:24Z ERR error="stream 9689 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
19
|
+
2026-03-07 04:07:24: 2026-03-07T03:07:24Z ERR Request failed error="stream 9689 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/agent-status-stream?agentId=3eecd57d-03ae-440d-8945-5b35f43a8d90 event=0 ip=198.41.192.47 type=http
|
|
20
|
+
2026-03-07 04:07:35: 2026-03-07T03:07:35Z ERR error="stream 9665 canceled by remote with error code 0" connIndex=2 event=1 ingressRule=0 originService=http://localhost:3100
|
|
21
|
+
2026-03-07 04:07:35: 2026-03-07T03:07:35Z ERR Request failed error="stream 9665 canceled by remote with error code 0" connIndex=2 dest=https://enterprise.agenticmail.io/api/engine/agent-status-stream?agentId=3eecd57d-03ae-440d-8945-5b35f43a8d90 event=0 ip=198.41.192.47 type=http
|
package/logs/john-error.log
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
2026-03-07 00:22:54: [TaskPoller] spawnForTask error: No API key configured for provider: undefined
|
|
2
|
+
2026-03-07 00:38:24: [TaskPoller] spawnForTask error: No API key configured for provider: undefined
|
|
3
|
+
2026-03-07 00:39:21: [runtime] Marked stale session: IeVjuDMPjWoL1lz_igPJc
|
|
4
|
+
2026-03-07 00:48:24: [TaskPoller] spawnForTask error: No API key configured for provider: undefined
|
|
5
|
+
2026-03-07 00:54:23: [TaskPoller] spawnForTask error: No API key configured for provider: undefined
|
|
6
|
+
2026-03-07 01:17:50: [runtime] Marked stale session: R4B5K264kgYijawS9jh4L
|