@sireai/optimus 0.1.15 → 0.1.17
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/README.md +12 -0
- package/dist/cli/feedback-delivery.d.ts +24 -2
- package/dist/cli/feedback-delivery.js +203 -113
- package/dist/cli/feedback-delivery.js.map +1 -1
- package/dist/cli/feedback.d.ts +14 -0
- package/dist/cli/feedback.js +72 -14
- package/dist/cli/feedback.js.map +1 -1
- package/dist/cli/optimus.js +25 -15
- package/dist/cli/optimus.js.map +1 -1
- package/dist/integrations/feishu/feishu-client.d.ts +1 -0
- package/dist/integrations/feishu/feishu-client.js +3 -0
- package/dist/integrations/feishu/feishu-client.js.map +1 -1
- package/dist/integrations/feishu/feishu-doc-service.d.ts +16 -1
- package/dist/integrations/feishu/feishu-doc-service.js +106 -1
- package/dist/integrations/feishu/feishu-doc-service.js.map +1 -1
- package/dist/task-environment/cancellation/task-cleanup-service.d.ts +1 -0
- package/dist/task-environment/cancellation/task-cleanup-service.js +22 -1
- package/dist/task-environment/cancellation/task-cleanup-service.js.map +1 -1
- package/dist/task-environment/orchestration/execution-context-assembler.js +5 -3
- package/dist/task-environment/orchestration/execution-context-assembler.js.map +1 -1
- package/dist/task-environment/orchestration/task-orchestrator.d.ts +1 -0
- package/dist/task-environment/orchestration/task-orchestrator.js +37 -1
- package/dist/task-environment/orchestration/task-orchestrator.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/feedback.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { copyFile, stat } from "node:fs/promises";
|
|
1
|
+
import { copyFile, readdir, readFile, stat } from "node:fs/promises";
|
|
2
2
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
|
+
import { hostname, userInfo } from "node:os";
|
|
5
6
|
import { promisify } from "node:util";
|
|
6
7
|
import { platform } from "node:process";
|
|
7
8
|
import { resolveDefaultFeedbackRootDir, resolveDefaultRuntimeRootDir } from "../config/optimus-paths.js";
|
|
@@ -50,6 +51,7 @@ function renderFeedbackMarkdown(input) {
|
|
|
50
51
|
"## Environment",
|
|
51
52
|
`Version: v${input.version}`,
|
|
52
53
|
`Submitted At: ${input.submittedAt}`,
|
|
54
|
+
`Submitted By: ${input.submitter.username}@${input.submitter.host}`,
|
|
53
55
|
`Platform: ${platform}`,
|
|
54
56
|
`Install Source: ${input.installSource}`,
|
|
55
57
|
"",
|
|
@@ -71,6 +73,10 @@ export async function createFeedbackReport(input) {
|
|
|
71
73
|
const archivePath = join(feedbackDir, `${feedbackId}.tar.gz`);
|
|
72
74
|
const runtimeRootDir = resolveDefaultRuntimeRootDir();
|
|
73
75
|
const installSource = await detectInstallSource(input.packageRoot);
|
|
76
|
+
const submitter = {
|
|
77
|
+
username: resolveSubmitterUsername(),
|
|
78
|
+
host: resolveSubmitterHost()
|
|
79
|
+
};
|
|
74
80
|
await mkdir(feedbackDir, { recursive: true });
|
|
75
81
|
const selectedLogs = resolveRuntimeLogsForTimestamp(runtimeRootDir, submittedAt);
|
|
76
82
|
const files = [];
|
|
@@ -91,6 +97,7 @@ export async function createFeedbackReport(input) {
|
|
|
91
97
|
version: input.currentVersion,
|
|
92
98
|
platform,
|
|
93
99
|
installSource,
|
|
100
|
+
submitter,
|
|
94
101
|
files: files.map((file) => ({
|
|
95
102
|
kind: file.kind,
|
|
96
103
|
fileName: file.fileName,
|
|
@@ -105,6 +112,7 @@ export async function createFeedbackReport(input) {
|
|
|
105
112
|
submittedAt,
|
|
106
113
|
version: input.currentVersion,
|
|
107
114
|
installSource,
|
|
115
|
+
submitter,
|
|
108
116
|
files
|
|
109
117
|
})}\n`, "utf8");
|
|
110
118
|
await writeFile(reportJsonPath, `${JSON.stringify(reportJson, null, 2)}\n`, "utf8");
|
|
@@ -116,18 +124,10 @@ export async function createFeedbackReport(input) {
|
|
|
116
124
|
reportJsonPath,
|
|
117
125
|
archivePath
|
|
118
126
|
}, null, 2)}\n`, "utf8");
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
"meta.json",
|
|
123
|
-
...files
|
|
124
|
-
.filter((file) => file.found)
|
|
125
|
-
.map((file) => file.fileName)
|
|
126
|
-
];
|
|
127
|
-
await execFileAsync("tar", ["-czf", archivePath, "-C", feedbackDir, ...archiveInputs], {
|
|
128
|
-
encoding: "utf8"
|
|
127
|
+
const archiveResult = await refreshFeedbackArchive({
|
|
128
|
+
feedbackDir,
|
|
129
|
+
archivePath
|
|
129
130
|
});
|
|
130
|
-
const archiveStats = await stat(archivePath);
|
|
131
131
|
return {
|
|
132
132
|
id: feedbackId,
|
|
133
133
|
feedbackDir,
|
|
@@ -135,9 +135,67 @@ export async function createFeedbackReport(input) {
|
|
|
135
135
|
reportJsonPath,
|
|
136
136
|
metaPath,
|
|
137
137
|
archivePath,
|
|
138
|
-
archiveSizeBytes:
|
|
138
|
+
archiveSizeBytes: archiveResult.archiveSizeBytes,
|
|
139
139
|
submittedAt,
|
|
140
|
+
submitter,
|
|
140
141
|
files
|
|
141
142
|
};
|
|
142
143
|
}
|
|
144
|
+
function resolveSubmitterUsername() {
|
|
145
|
+
try {
|
|
146
|
+
const username = userInfo().username?.trim();
|
|
147
|
+
if (username) {
|
|
148
|
+
return username;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// ignore and fall back to env
|
|
153
|
+
}
|
|
154
|
+
return process.env.USER?.trim() || process.env.LOGNAME?.trim() || "unknown";
|
|
155
|
+
}
|
|
156
|
+
function resolveSubmitterHost() {
|
|
157
|
+
try {
|
|
158
|
+
const value = hostname().trim();
|
|
159
|
+
if (value) {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// ignore and fall back to env
|
|
165
|
+
}
|
|
166
|
+
return process.env.HOSTNAME?.trim() || "unknown-host";
|
|
167
|
+
}
|
|
168
|
+
export async function updateFeedbackMeta(report, patch) {
|
|
169
|
+
let current = {};
|
|
170
|
+
try {
|
|
171
|
+
const raw = await readFile(report.metaPath, "utf8");
|
|
172
|
+
const parsed = JSON.parse(raw);
|
|
173
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
174
|
+
current = parsed;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
current = {};
|
|
179
|
+
}
|
|
180
|
+
await writeFile(report.metaPath, `${JSON.stringify({
|
|
181
|
+
...current,
|
|
182
|
+
...patch
|
|
183
|
+
}, null, 2)}\n`, "utf8");
|
|
184
|
+
}
|
|
185
|
+
export async function refreshFeedbackArchive(input) {
|
|
186
|
+
const entries = (await readdir(input.feedbackDir, { withFileTypes: true }))
|
|
187
|
+
.filter((entry) => entry.isFile())
|
|
188
|
+
.map((entry) => entry.name)
|
|
189
|
+
.filter((name) => name !== basename(input.archivePath))
|
|
190
|
+
.sort();
|
|
191
|
+
await execFileAsync("tar", ["-czf", input.archivePath, "-C", input.feedbackDir, ...entries], {
|
|
192
|
+
encoding: "utf8"
|
|
193
|
+
});
|
|
194
|
+
const archiveStats = await stat(input.archivePath);
|
|
195
|
+
return {
|
|
196
|
+
archivePath: input.archivePath,
|
|
197
|
+
archiveSizeBytes: archiveStats.size,
|
|
198
|
+
includedFiles: entries
|
|
199
|
+
};
|
|
200
|
+
}
|
|
143
201
|
//# sourceMappingURL=feedback.js.map
|
package/dist/cli/feedback.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/cli/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/cli/feedback.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/optimus.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { buildDefaultConfig, loadConfig } from "../config/load-config.js";
|
|
3
3
|
import { createReadStream, createWriteStream } from "node:fs";
|
|
4
4
|
import { access, mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
5
|
-
import { basename, dirname, join, resolve } from "node:path";
|
|
5
|
+
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { execFile, spawn } from "node:child_process";
|
|
8
8
|
import { createInterface } from "node:readline/promises";
|
|
@@ -32,7 +32,7 @@ import { TaskPublicationService } from "../task-environment/delivery/task-public
|
|
|
32
32
|
import { FeishuClient } from "../integrations/feishu/feishu-client.js";
|
|
33
33
|
import { FeishuUserService } from "../integrations/feishu/feishu-user-service.js";
|
|
34
34
|
import { createFeedbackReport } from "./feedback.js";
|
|
35
|
-
import { DEFAULT_FEEDBACK_RECIPIENT_EMAIL, FeishuFeedbackDeliveryService, resolveDefaultFeedbackRecipientFallbackOpenId } from "./feedback-delivery.js";
|
|
35
|
+
import { DEFAULT_FEEDBACK_RECIPIENT_EMAIL, FeishuFeedbackDeliveryService, persistFeedbackDeliveryResult, resolveDefaultFeedbackRecipientFallbackOpenId } from "./feedback-delivery.js";
|
|
36
36
|
import { resolveDefaultConfigPath, resolveDefaultEnvPath, resolveOptimusHomeDir } from "../config/optimus-paths.js";
|
|
37
37
|
import { checkForSelfUpdate, installSelfUpdate, recordSkippedSelfUpdate, readSelfUpdateState, shouldPromptForCachedStartupUpdate } from "./self-update.js";
|
|
38
38
|
const CLI_ROOT_DIR = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
@@ -1731,15 +1731,25 @@ function inferArtifactDir(artifacts, bundle) {
|
|
|
1731
1731
|
}
|
|
1732
1732
|
return dirname(artifactPath);
|
|
1733
1733
|
}
|
|
1734
|
-
function inferTaskRootDir(artifactDir) {
|
|
1734
|
+
function inferTaskRootDir(artifactDir, fallbackTaskRootDir) {
|
|
1735
1735
|
if (!artifactDir) {
|
|
1736
|
-
return
|
|
1736
|
+
return fallbackTaskRootDir;
|
|
1737
|
+
}
|
|
1738
|
+
if (fallbackTaskRootDir) {
|
|
1739
|
+
const resolvedArtifactDir = resolve(artifactDir);
|
|
1740
|
+
const resolvedFallbackTaskRootDir = resolve(fallbackTaskRootDir);
|
|
1741
|
+
if (resolvedArtifactDir === resolvedFallbackTaskRootDir
|
|
1742
|
+
|| resolvedArtifactDir.startsWith(`${resolvedFallbackTaskRootDir}${sep}`)) {
|
|
1743
|
+
return resolve(artifactDir, "..", "..");
|
|
1744
|
+
}
|
|
1745
|
+
return resolvedFallbackTaskRootDir;
|
|
1737
1746
|
}
|
|
1738
1747
|
return resolve(artifactDir, "..", "..");
|
|
1739
1748
|
}
|
|
1740
1749
|
async function buildReplayExecutionContext(input) {
|
|
1741
1750
|
const artifactDir = inferArtifactDir(input.artifacts, input.deliveryBundle);
|
|
1742
|
-
const
|
|
1751
|
+
const fallbackTaskRootDir = join(input.config.storage.rootDir, "workspaces", input.taskId);
|
|
1752
|
+
const taskRootDir = inferTaskRootDir(artifactDir, fallbackTaskRootDir);
|
|
1743
1753
|
const sourceDir = input.deliveryBundle?.publication?.git?.repoDir?.trim()
|
|
1744
1754
|
|| input.latestRun?.addresses?.visibleRepoDir?.trim()
|
|
1745
1755
|
|| input.latestRun?.addresses?.workspaceDir?.trim();
|
|
@@ -2114,18 +2124,13 @@ async function main() {
|
|
|
2114
2124
|
process.exitCode = 1;
|
|
2115
2125
|
return;
|
|
2116
2126
|
}
|
|
2127
|
+
console.log("[optimus] submitting feedback...");
|
|
2117
2128
|
const result = await createFeedbackReport({
|
|
2118
2129
|
title,
|
|
2119
2130
|
description,
|
|
2120
2131
|
currentVersion,
|
|
2121
2132
|
packageRoot: CLI_ROOT_DIR
|
|
2122
2133
|
});
|
|
2123
|
-
console.log("[optimus] feedback saved locally");
|
|
2124
|
-
console.log(`id: ${result.id}`);
|
|
2125
|
-
console.log(`path: ${result.feedbackDir}`);
|
|
2126
|
-
console.log(`report: ${result.reportPath}`);
|
|
2127
|
-
console.log(`archive: ${result.archivePath}`);
|
|
2128
|
-
console.log(`logs: ${result.files.filter((file) => file.found).length}/${result.files.length}`);
|
|
2129
2134
|
const feedbackDelivery = new FeishuFeedbackDeliveryService({
|
|
2130
2135
|
config
|
|
2131
2136
|
});
|
|
@@ -2135,10 +2140,14 @@ async function main() {
|
|
|
2135
2140
|
currentVersion,
|
|
2136
2141
|
report: result
|
|
2137
2142
|
});
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2143
|
+
await persistFeedbackDeliveryResult(result, deliveryResult);
|
|
2144
|
+
const hasWarning = deliveryResult.document.status !== "created" || deliveryResult.notification.status !== "sent";
|
|
2145
|
+
if (hasWarning) {
|
|
2146
|
+
console.log(`[optimus] feedback finished with warnings. doc=${deliveryResult.document.status}, notify=${deliveryResult.notification.status}`);
|
|
2147
|
+
}
|
|
2148
|
+
else {
|
|
2149
|
+
console.log("[optimus] feedback submitted.");
|
|
2150
|
+
}
|
|
2142
2151
|
return;
|
|
2143
2152
|
}
|
|
2144
2153
|
if (command === "retry-task") {
|
|
@@ -2363,6 +2372,7 @@ async function main() {
|
|
|
2363
2372
|
const existingBundle = await store.getLatestTaskDeliveryBundle(taskId);
|
|
2364
2373
|
const latestRun = (await store.listTaskRuns()).filter((run) => run.taskId === taskId).at(-1) ?? null;
|
|
2365
2374
|
const replayContext = await buildReplayExecutionContext({
|
|
2375
|
+
taskId,
|
|
2366
2376
|
config,
|
|
2367
2377
|
taskType: task.taskType,
|
|
2368
2378
|
taskRepo: taskPackage.repo,
|