@sireai/optimus 0.1.16 → 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.
@@ -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 archiveInputs = [
120
- "report.md",
121
- "report.json",
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: archiveStats.size,
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
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/cli/feedback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/cli/feedback.ts"],"names":[],"mappings":"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"}
@@ -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)), "..", "..");
@@ -2124,18 +2124,13 @@ async function main() {
2124
2124
  process.exitCode = 1;
2125
2125
  return;
2126
2126
  }
2127
+ console.log("[optimus] submitting feedback...");
2127
2128
  const result = await createFeedbackReport({
2128
2129
  title,
2129
2130
  description,
2130
2131
  currentVersion,
2131
2132
  packageRoot: CLI_ROOT_DIR
2132
2133
  });
2133
- console.log("[optimus] feedback saved locally");
2134
- console.log(`id: ${result.id}`);
2135
- console.log(`path: ${result.feedbackDir}`);
2136
- console.log(`report: ${result.reportPath}`);
2137
- console.log(`archive: ${result.archivePath}`);
2138
- console.log(`logs: ${result.files.filter((file) => file.found).length}/${result.files.length}`);
2139
2134
  const feedbackDelivery = new FeishuFeedbackDeliveryService({
2140
2135
  config
2141
2136
  });
@@ -2145,10 +2140,14 @@ async function main() {
2145
2140
  currentVersion,
2146
2141
  report: result
2147
2142
  });
2148
- console.log(`recipient: ${deliveryResult.recipientEmail}`);
2149
- console.log(`open_id: ${deliveryResult.recipientOpenId}`);
2150
- console.log(`doc: ${deliveryResult.document.status}${deliveryResult.document.url ? ` (${deliveryResult.document.url})` : deliveryResult.document.reason ? ` (${deliveryResult.document.reason})` : ""}`);
2151
- console.log(`notify: ${deliveryResult.notification.status}${deliveryResult.notification.reason ? ` (${deliveryResult.notification.reason})` : ""}`);
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
+ }
2152
2151
  return;
2153
2152
  }
2154
2153
  if (command === "retry-task") {