@atlasharness/atlascode 0.1.33 → 0.1.34
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 +6 -5
- package/dist/cli.js +149 -44
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
## 安装
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
两种通道,装好后得双命令:`atlascode`(正名,与包名 / 品牌全名一致)/ `atlas`
|
|
14
|
+
(别名,更短)——二者同起 TUI,行为等价(O-3,0.1.34):
|
|
14
15
|
|
|
15
16
|
**① npm 一行(推荐,仅需 [node](https://nodejs.org) ≥ 20,无需 bun/源码构建)**
|
|
16
17
|
|
|
17
18
|
```bash
|
|
18
19
|
npm install -g @atlasharness/atlascode
|
|
19
|
-
|
|
20
|
+
atlascode --help # 别名 `atlas` 同效
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
**② git 源码**(前置:`git` + [bun](https://bun.sh)(构建)+ `node`(运行))
|
|
@@ -30,9 +31,9 @@ atlas --help
|
|
|
30
31
|
可覆盖 env:`ATLAS_INSTALL_ROOT`(默认 `~/.atlas/atlascode`)/ `ATLAS_BIN_DIR`
|
|
31
32
|
(默认 `~/.atlas/bin`)/ `ATLAS_BIN_NAME`(默认 `atlas`)。
|
|
32
33
|
|
|
33
|
-
>
|
|
34
|
-
>
|
|
35
|
-
>
|
|
34
|
+
> git 通道缺省 REPO = 公开发布仓 `vincentlau2046/AtlasCode`(P-1 已解除);
|
|
35
|
+
> 本地开发可显式传参(本地仓路径或 `ATLAS_REPO`);npm 通道不依赖 git 远端,
|
|
36
|
+
> 发布后即可用。
|
|
36
37
|
> 装好后远端升级:git 通道跑 `atlas update`(= `git pull --ff-only` + `bun install`
|
|
37
38
|
> + build,原地重建符号链接即刻生效);npm 通道跑 `npm install -g
|
|
38
39
|
> @atlasharness/atlascode@latest`。本地 dev loop 见 `docs/dev-loop.md`。
|
package/dist/cli.js
CHANGED
|
@@ -83531,10 +83531,18 @@ var init_setup = __esm(() => {
|
|
|
83531
83531
|
// src/cli/dispatch.ts
|
|
83532
83532
|
async function main() {
|
|
83533
83533
|
enforceNoDebugGuard();
|
|
83534
|
-
process.
|
|
83534
|
+
const debugGate = isEnvTruthy(process.env.DEBUG) || process.argv.includes("--debug") || process.argv.includes("-d") || process.argv.some((arg) => arg.startsWith("--debug="));
|
|
83535
|
+
if (debugGate) {
|
|
83536
|
+
process.stderr.write(`[${PRODUCT_BRAND}] main() starting...
|
|
83535
83537
|
`);
|
|
83538
|
+
}
|
|
83536
83539
|
process.env.NoDefaultCurrentDirectoryInExePath = "1";
|
|
83537
|
-
process.on("exit", () => {
|
|
83540
|
+
process.on("exit", () => {
|
|
83541
|
+
try {
|
|
83542
|
+
process.stderr.write(`[atlas][exit] code=${process.exitCode ?? 0}
|
|
83543
|
+
`);
|
|
83544
|
+
} catch {}
|
|
83545
|
+
});
|
|
83538
83546
|
process.on("SIGINT", () => {
|
|
83539
83547
|
if (process.argv.includes("-p") || process.argv.includes("--print")) {
|
|
83540
83548
|
return;
|
|
@@ -158762,8 +158770,8 @@ var init_theme = __esm(() => {
|
|
|
158762
158770
|
brand_mark_bg: "rgb(0,0,0)",
|
|
158763
158771
|
ascendBlue: "rgb(0,102,255)",
|
|
158764
158772
|
ascendViolet: "rgb(155,58,138)",
|
|
158765
|
-
ascendAmber: "rgb(
|
|
158766
|
-
ascendFlame: "rgb(
|
|
158773
|
+
ascendAmber: "rgb(180,83,9)",
|
|
158774
|
+
ascendFlame: "rgb(194,65,12)",
|
|
158767
158775
|
userMessageBackground: "rgb(240, 240, 240)",
|
|
158768
158776
|
userMessageBackgroundHover: "rgb(252, 252, 252)",
|
|
158769
158777
|
messageActionsBackground: "rgb(232, 236, 244)",
|
|
@@ -158981,8 +158989,8 @@ var init_theme = __esm(() => {
|
|
|
158981
158989
|
brand_mark_bg: "rgb(0,0,0)",
|
|
158982
158990
|
ascendBlue: "rgb(0,102,255)",
|
|
158983
158991
|
ascendViolet: "rgb(155,58,138)",
|
|
158984
|
-
ascendAmber: "rgb(
|
|
158985
|
-
ascendFlame: "rgb(
|
|
158992
|
+
ascendAmber: "rgb(180,83,9)",
|
|
158993
|
+
ascendFlame: "rgb(194,65,12)",
|
|
158986
158994
|
userMessageBackground: "rgb(220, 220, 220)",
|
|
158987
158995
|
userMessageBackgroundHover: "rgb(232, 232, 232)",
|
|
158988
158996
|
messageActionsBackground: "rgb(210, 216, 226)",
|
|
@@ -309210,6 +309218,9 @@ function forceExit(exitCode) {
|
|
|
309210
309218
|
process.exit(exitCode);
|
|
309211
309219
|
} catch (e) {
|
|
309212
309220
|
if (false) {}
|
|
309221
|
+
logForDiagnosticsNoPII("error", "exit_force_sigkill", {
|
|
309222
|
+
exit_code: exitCode
|
|
309223
|
+
});
|
|
309213
309224
|
process.kill(process.pid, "SIGKILL");
|
|
309214
309225
|
}
|
|
309215
309226
|
if (true) {
|
|
@@ -309234,9 +309245,16 @@ async function gracefulShutdown(exitCode = 0, reason = "other", options) {
|
|
|
309234
309245
|
return;
|
|
309235
309246
|
}
|
|
309236
309247
|
shutdownInProgress = true;
|
|
309248
|
+
logForDiagnosticsNoPII("info", "exit_reason", {
|
|
309249
|
+
exit_code: exitCode,
|
|
309250
|
+
reason: String(reason)
|
|
309251
|
+
});
|
|
309237
309252
|
await Promise.resolve().then(() => init_hooks7());
|
|
309238
309253
|
const sessionEndTimeoutMs = getSessionEndHookTimeoutMs();
|
|
309239
309254
|
failsafeTimer = setTimeout((code) => {
|
|
309255
|
+
logForDiagnosticsNoPII("warn", "shutdown_failsafe", {
|
|
309256
|
+
exit_code: code
|
|
309257
|
+
});
|
|
309240
309258
|
cleanupTerminalModes();
|
|
309241
309259
|
printResumeHint();
|
|
309242
309260
|
forceExit(code);
|
|
@@ -371035,6 +371053,71 @@ var init_logoV2Utils = __esm(() => {
|
|
|
371035
371053
|
cachedActivity = [];
|
|
371036
371054
|
});
|
|
371037
371055
|
|
|
371056
|
+
// src/tui/components/LogoV2/markDegrade.ts
|
|
371057
|
+
function getBeamArt(tier) {
|
|
371058
|
+
switch (tier) {
|
|
371059
|
+
case 2:
|
|
371060
|
+
return BEAM_ART_T2;
|
|
371061
|
+
case 1:
|
|
371062
|
+
return BEAM_ART_T1;
|
|
371063
|
+
default:
|
|
371064
|
+
return BEAM_ART_T0;
|
|
371065
|
+
}
|
|
371066
|
+
}
|
|
371067
|
+
function resolveMarkTier(input = {}, blocklist = MARK_BLOCKLIST) {
|
|
371068
|
+
const envTier = input.degradeEnv?.trim();
|
|
371069
|
+
if (envTier === "2")
|
|
371070
|
+
return 2;
|
|
371071
|
+
if (envTier === "1")
|
|
371072
|
+
return 1;
|
|
371073
|
+
if (input.terminal) {
|
|
371074
|
+
const hit = blocklist.find((b) => b.terminal === input.terminal && (!b.font || !input.font || b.font === input.font));
|
|
371075
|
+
if (hit)
|
|
371076
|
+
return hit.tier;
|
|
371077
|
+
}
|
|
371078
|
+
const probe = input.probeAdvance;
|
|
371079
|
+
if (probe) {
|
|
371080
|
+
if (probe.solid != null && probe.solid !== 1)
|
|
371081
|
+
return 2;
|
|
371082
|
+
if (probe.half != null && probe.half !== 1)
|
|
371083
|
+
return 1;
|
|
371084
|
+
}
|
|
371085
|
+
return 0;
|
|
371086
|
+
}
|
|
371087
|
+
function resolveMarkTierFromEnv() {
|
|
371088
|
+
return resolveMarkTier({
|
|
371089
|
+
degradeEnv: process.env[MARK_DEGRADE_ENV],
|
|
371090
|
+
terminal: env5.terminal,
|
|
371091
|
+
probeAdvance: null
|
|
371092
|
+
});
|
|
371093
|
+
}
|
|
371094
|
+
var MARK_DEGRADE_ENV = "ATLAS_MARK_DEGRADE", BEAM_ART_T0, BEAM_ART_T1, BEAM_ART_T2, MARK_BLOCKLIST;
|
|
371095
|
+
var init_markDegrade = __esm(() => {
|
|
371096
|
+
init_env2();
|
|
371097
|
+
BEAM_ART_T0 = [
|
|
371098
|
+
{ chars: " ▄█▄ ", color: "ascendAmber" },
|
|
371099
|
+
{ chars: " ▓███▓ ", color: "ascendAmber" },
|
|
371100
|
+
{ chars: " █▓▓▓▓▓█ ", color: "ascendFlame" },
|
|
371101
|
+
{ chars: " ▓█ █▓ ", color: "ascendViolet" },
|
|
371102
|
+
{ chars: "█▓█ █▓█", color: "ascendBlue" }
|
|
371103
|
+
];
|
|
371104
|
+
BEAM_ART_T1 = [
|
|
371105
|
+
{ chars: " ███ ", color: "ascendAmber" },
|
|
371106
|
+
{ chars: " ▓███▓ ", color: "ascendAmber" },
|
|
371107
|
+
{ chars: " █▓▓▓▓▓█ ", color: "ascendFlame" },
|
|
371108
|
+
{ chars: " ▓█ █▓ ", color: "ascendViolet" },
|
|
371109
|
+
{ chars: "█▓█ █▓█", color: "ascendBlue" }
|
|
371110
|
+
];
|
|
371111
|
+
BEAM_ART_T2 = [
|
|
371112
|
+
{ chars: " *** ", color: "ascendAmber" },
|
|
371113
|
+
{ chars: " * * ", color: "ascendAmber" },
|
|
371114
|
+
{ chars: " * *** * ", color: "ascendFlame" },
|
|
371115
|
+
{ chars: "* * *", color: "ascendViolet" },
|
|
371116
|
+
{ chars: "* *", color: "ascendBlue" }
|
|
371117
|
+
];
|
|
371118
|
+
MARK_BLOCKLIST = [];
|
|
371119
|
+
});
|
|
371120
|
+
|
|
371038
371121
|
// src/tui/components/LogoV2/Beam.tsx
|
|
371039
371122
|
function wordmarkParts() {
|
|
371040
371123
|
const family = PRODUCT_FAMILY;
|
|
@@ -371072,10 +371155,11 @@ function Beam() {
|
|
|
371072
371155
|
if (env5.terminal === "Apple_Terminal") {
|
|
371073
371156
|
return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(AppleTerminalBeam, {}, undefined, false, undefined, this);
|
|
371074
371157
|
}
|
|
371158
|
+
const art = getBeamArt(resolveMarkTierFromEnv());
|
|
371075
371159
|
return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(ThemedBox_default, {
|
|
371076
371160
|
flexDirection: "column",
|
|
371077
371161
|
children: [
|
|
371078
|
-
|
|
371162
|
+
art.map((row, i) => /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(ThemedText, {
|
|
371079
371163
|
color: row.color,
|
|
371080
371164
|
children: row.chars
|
|
371081
371165
|
}, i, false, undefined, this)),
|
|
@@ -371084,11 +371168,12 @@ function Beam() {
|
|
|
371084
371168
|
}, undefined, true, undefined, this);
|
|
371085
371169
|
}
|
|
371086
371170
|
function AppleTerminalBeam() {
|
|
371171
|
+
const art = getBeamArt(resolveMarkTierFromEnv());
|
|
371087
371172
|
return /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(ThemedBox_default, {
|
|
371088
371173
|
flexDirection: "column",
|
|
371089
371174
|
alignItems: "center",
|
|
371090
371175
|
children: [
|
|
371091
|
-
|
|
371176
|
+
art.map((row, i) => /* @__PURE__ */ jsx_dev_runtime200.jsxDEV(ThemedText, {
|
|
371092
371177
|
color: "brand_mark",
|
|
371093
371178
|
children: row.chars
|
|
371094
371179
|
}, i, false, undefined, this)),
|
|
@@ -371096,19 +371181,14 @@ function AppleTerminalBeam() {
|
|
|
371096
371181
|
]
|
|
371097
371182
|
}, undefined, true, undefined, this);
|
|
371098
371183
|
}
|
|
371099
|
-
var jsx_dev_runtime200
|
|
371184
|
+
var jsx_dev_runtime200;
|
|
371100
371185
|
var init_Beam = __esm(() => {
|
|
371101
371186
|
init_ink2();
|
|
371102
371187
|
init_env2();
|
|
371103
371188
|
init_shared();
|
|
371189
|
+
init_markDegrade();
|
|
371190
|
+
init_markDegrade();
|
|
371104
371191
|
jsx_dev_runtime200 = __toESM(require_jsx_dev_runtime(), 1);
|
|
371105
|
-
BEAM_ART = [
|
|
371106
|
-
{ chars: " ▄█▄ ", color: "ascendAmber" },
|
|
371107
|
-
{ chars: " ▓███▓ ", color: "ascendAmber" },
|
|
371108
|
-
{ chars: " █▓▓▓▓▓█ ", color: "ascendFlame" },
|
|
371109
|
-
{ chars: " ▓█ █▓ ", color: "ascendViolet" },
|
|
371110
|
-
{ chars: "█▓█ █▓█", color: "ascendBlue" }
|
|
371111
|
-
];
|
|
371112
371192
|
});
|
|
371113
371193
|
|
|
371114
371194
|
// src/tui/components/LogoV2/Feed.tsx
|
|
@@ -371392,10 +371472,17 @@ var init_feedConfigs = __esm(() => {
|
|
|
371392
371472
|
});
|
|
371393
371473
|
|
|
371394
371474
|
// src/tui/components/LogoV2/AnimatedBeam.tsx
|
|
371475
|
+
function nextPulseStep(beats, pulseOn) {
|
|
371476
|
+
if (beats >= PULSE_MAX_BEATS) {
|
|
371477
|
+
return { beats, pulseOn: true, done: true };
|
|
371478
|
+
}
|
|
371479
|
+
return { beats: beats + 1, pulseOn: !pulseOn, done: false };
|
|
371480
|
+
}
|
|
371395
371481
|
function AnimatedBeam() {
|
|
371396
371482
|
const [reducedMotion] = import_react118.useState(() => getInitialSettings2().prefersReducedMotion ?? false);
|
|
371397
371483
|
const [revealed, setRevealed] = import_react118.useState(reducedMotion ? ROW_COUNT : 1);
|
|
371398
371484
|
const [pulseOn, setPulseOn] = import_react118.useState(true);
|
|
371485
|
+
const [pulseBeats, setPulseBeats] = import_react118.useState(0);
|
|
371399
371486
|
import_react118.useEffect(() => {
|
|
371400
371487
|
if (reducedMotion) {
|
|
371401
371488
|
return;
|
|
@@ -371404,13 +371491,23 @@ function AnimatedBeam() {
|
|
|
371404
371491
|
const t = setTimeout(() => setRevealed((r) => r + 1), REVEAL_MS);
|
|
371405
371492
|
return () => clearTimeout(t);
|
|
371406
371493
|
}
|
|
371407
|
-
const
|
|
371494
|
+
const s = nextPulseStep(pulseBeats, pulseOn);
|
|
371495
|
+
if (s.done) {
|
|
371496
|
+
if (pulseOn !== s.pulseOn) {
|
|
371497
|
+
setPulseOn(s.pulseOn);
|
|
371498
|
+
}
|
|
371499
|
+
return;
|
|
371500
|
+
}
|
|
371501
|
+
const t = setTimeout(() => {
|
|
371502
|
+
setPulseBeats(s.beats);
|
|
371503
|
+
setPulseOn(s.pulseOn);
|
|
371504
|
+
}, PULSE_MS);
|
|
371408
371505
|
return () => clearTimeout(t);
|
|
371409
|
-
}, [revealed, reducedMotion]);
|
|
371506
|
+
}, [revealed, reducedMotion, pulseBeats, pulseOn]);
|
|
371410
371507
|
return /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(ThemedBox_default, {
|
|
371411
371508
|
height: ROW_COUNT,
|
|
371412
371509
|
flexDirection: "column",
|
|
371413
|
-
children:
|
|
371510
|
+
children: BEAM_ART2.map((row, i) => {
|
|
371414
371511
|
const depthFromBottom = ROW_COUNT - 1 - i;
|
|
371415
371512
|
if (depthFromBottom >= revealed) {
|
|
371416
371513
|
return /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(ThemedText, {
|
|
@@ -371430,14 +371527,16 @@ function AnimatedBeam() {
|
|
|
371430
371527
|
})
|
|
371431
371528
|
}, undefined, false, undefined, this);
|
|
371432
371529
|
}
|
|
371433
|
-
var import_react118, jsx_dev_runtime203, ROW_COUNT, REVEAL_MS = 120, PULSE_MS = 800;
|
|
371530
|
+
var import_react118, jsx_dev_runtime203, MARK_TIER, BEAM_ART2, ROW_COUNT, REVEAL_MS = 120, PULSE_MS = 800, PULSE_MAX_BEATS = 4;
|
|
371434
371531
|
var init_AnimatedBeam = __esm(() => {
|
|
371435
371532
|
init_ink2();
|
|
371436
371533
|
init_settings3();
|
|
371437
|
-
|
|
371534
|
+
init_markDegrade();
|
|
371438
371535
|
import_react118 = __toESM(require_react(), 1);
|
|
371439
371536
|
jsx_dev_runtime203 = __toESM(require_jsx_dev_runtime(), 1);
|
|
371440
|
-
|
|
371537
|
+
MARK_TIER = resolveMarkTierFromEnv();
|
|
371538
|
+
BEAM_ART2 = getBeamArt(MARK_TIER);
|
|
371539
|
+
ROW_COUNT = BEAM_ART2.length;
|
|
371441
371540
|
});
|
|
371442
371541
|
|
|
371443
371542
|
// src/tui/components/LogoV2/CondensedLogo.tsx
|
|
@@ -372059,7 +372158,7 @@ function LogoV2() {
|
|
|
372059
372158
|
children: /* @__PURE__ */ jsx_dev_runtime207.jsxDEV(ThemedBox_default, {
|
|
372060
372159
|
flexDirection: "column",
|
|
372061
372160
|
borderStyle: "round",
|
|
372062
|
-
borderColor: "
|
|
372161
|
+
borderColor: "inactive",
|
|
372063
372162
|
borderText: t11,
|
|
372064
372163
|
paddingX: 1,
|
|
372065
372164
|
paddingY: 1,
|
|
@@ -417343,7 +417442,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT matching this schema:
|
|
|
417343
417442
|
return null;
|
|
417344
417443
|
}
|
|
417345
417444
|
}
|
|
417346
|
-
function
|
|
417445
|
+
function detectParallelSessions(sessions) {
|
|
417347
417446
|
const OVERLAP_WINDOW_MS = 30 * 60000;
|
|
417348
417447
|
const allSessionMessages = [];
|
|
417349
417448
|
for (const session of sessions) {
|
|
@@ -417355,8 +417454,8 @@ function detectMultiClauding(sessions) {
|
|
|
417355
417454
|
}
|
|
417356
417455
|
}
|
|
417357
417456
|
allSessionMessages.sort((a, b) => a.ts - b.ts);
|
|
417358
|
-
const
|
|
417359
|
-
const
|
|
417457
|
+
const parallelSessionPairs = new Set;
|
|
417458
|
+
const messagesDuringParallel = new Set;
|
|
417360
417459
|
let windowStart = 0;
|
|
417361
417460
|
const sessionLastIndex = new Map;
|
|
417362
417461
|
for (let i = 0;i < allSessionMessages.length; i++) {
|
|
@@ -417374,10 +417473,10 @@ function detectMultiClauding(sessions) {
|
|
|
417374
417473
|
const between = allSessionMessages[j];
|
|
417375
417474
|
if (between.sessionId !== msg.sessionId) {
|
|
417376
417475
|
const pair = [msg.sessionId, between.sessionId].sort().join(":");
|
|
417377
|
-
|
|
417378
|
-
|
|
417379
|
-
|
|
417380
|
-
|
|
417476
|
+
parallelSessionPairs.add(pair);
|
|
417477
|
+
messagesDuringParallel.add(`${allSessionMessages[prevIndex].ts}:${msg.sessionId}`);
|
|
417478
|
+
messagesDuringParallel.add(`${between.ts}:${between.sessionId}`);
|
|
417479
|
+
messagesDuringParallel.add(`${msg.ts}:${msg.sessionId}`);
|
|
417381
417480
|
break;
|
|
417382
417481
|
}
|
|
417383
417482
|
}
|
|
@@ -417385,7 +417484,7 @@ function detectMultiClauding(sessions) {
|
|
|
417385
417484
|
sessionLastIndex.set(msg.sessionId, i);
|
|
417386
417485
|
}
|
|
417387
417486
|
const sessionsWithOverlaps = new Set;
|
|
417388
|
-
for (const pair of
|
|
417487
|
+
for (const pair of parallelSessionPairs) {
|
|
417389
417488
|
const [s1, s2] = pair.split(":");
|
|
417390
417489
|
if (s1)
|
|
417391
417490
|
sessionsWithOverlaps.add(s1);
|
|
@@ -417393,9 +417492,9 @@ function detectMultiClauding(sessions) {
|
|
|
417393
417492
|
sessionsWithOverlaps.add(s2);
|
|
417394
417493
|
}
|
|
417395
417494
|
return {
|
|
417396
|
-
overlap_events:
|
|
417495
|
+
overlap_events: parallelSessionPairs.size,
|
|
417397
417496
|
sessions_involved: sessionsWithOverlaps.size,
|
|
417398
|
-
user_messages_during:
|
|
417497
|
+
user_messages_during: messagesDuringParallel.size
|
|
417399
417498
|
};
|
|
417400
417499
|
}
|
|
417401
417500
|
function aggregateData(sessions, facets) {
|
|
@@ -417436,7 +417535,7 @@ function aggregateData(sessions, facets) {
|
|
|
417436
417535
|
days_active: 0,
|
|
417437
417536
|
messages_per_day: 0,
|
|
417438
417537
|
message_hours: [],
|
|
417439
|
-
|
|
417538
|
+
parallel_sessions: {
|
|
417440
417539
|
overlap_events: 0,
|
|
417441
417540
|
sessions_involved: 0,
|
|
417442
417541
|
user_messages_during: 0
|
|
@@ -417526,7 +417625,7 @@ function aggregateData(sessions, facets) {
|
|
|
417526
417625
|
result.days_active = uniqueDays.size;
|
|
417527
417626
|
result.messages_per_day = result.days_active > 0 ? Math.round(result.total_messages / result.days_active * 10) / 10 : 0;
|
|
417528
417627
|
result.message_hours = allMessageHours;
|
|
417529
|
-
result.
|
|
417628
|
+
result.parallel_sessions = detectParallelSessions(sessions);
|
|
417530
417629
|
return result;
|
|
417531
417630
|
}
|
|
417532
417631
|
async function generateSectionInsight(section, dataContext) {
|
|
@@ -418264,25 +418363,25 @@ function generateHtmlReport(data, insights) {
|
|
|
418264
418363
|
</div>
|
|
418265
418364
|
</div>
|
|
418266
418365
|
|
|
418267
|
-
<!-- Parallel Sessions section (
|
|
418366
|
+
<!-- Parallel Sessions section (D-10 de-claude) -->
|
|
418268
418367
|
<div class="chart-card" style="margin: 24px 0;">
|
|
418269
418368
|
<div class="chart-title">Parallel Sessions</div>
|
|
418270
|
-
${data.
|
|
418369
|
+
${data.parallel_sessions.overlap_events === 0 ? `
|
|
418271
418370
|
<p style="font-size: 14px; color: #64748b; padding: 8px 0;">
|
|
418272
418371
|
No parallel session usage detected. You typically work with one Atlas session at a time.
|
|
418273
418372
|
</p>
|
|
418274
418373
|
` : `
|
|
418275
418374
|
<div style="display: flex; gap: 24px; margin: 12px 0;">
|
|
418276
418375
|
<div style="text-align: center;">
|
|
418277
|
-
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.
|
|
418376
|
+
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.parallel_sessions.overlap_events}</div>
|
|
418278
418377
|
<div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Overlap Events</div>
|
|
418279
418378
|
</div>
|
|
418280
418379
|
<div style="text-align: center;">
|
|
418281
|
-
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.
|
|
418380
|
+
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.parallel_sessions.sessions_involved}</div>
|
|
418282
418381
|
<div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Sessions Involved</div>
|
|
418283
418382
|
</div>
|
|
418284
418383
|
<div style="text-align: center;">
|
|
418285
|
-
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.total_messages > 0 ? Math.round(100 * data.
|
|
418384
|
+
<div style="font-size: 24px; font-weight: 700; color: #7c3aed;">${data.total_messages > 0 ? Math.round(100 * data.parallel_sessions.user_messages_during / data.total_messages) : 0}%</div>
|
|
418286
418385
|
<div style="font-size: 11px; color: #64748b; text-transform: uppercase;">Of Messages</div>
|
|
418287
418386
|
</div>
|
|
418288
418387
|
</div>
|
|
@@ -458439,6 +458538,7 @@ var init_useDynamicTips = __esm(() => {
|
|
|
458439
458538
|
// src/tui/components/PromptInput/PersistentFooterIndicator.tsx
|
|
458440
458539
|
function PersistentFooterIndicator({ messagesRef }) {
|
|
458441
458540
|
const effortValue = useAppState((s) => s.effortValue);
|
|
458541
|
+
const npmHintActive = useAppState((s) => s.notifications.current?.key === "npm-deprecation-warning");
|
|
458442
458542
|
const mainLoopModel = useMainLoopModel();
|
|
458443
458543
|
const tip = useDynamicTip(messagesRef);
|
|
458444
458544
|
const effortText = getEffortNotificationText(effortValue, mainLoopModel);
|
|
@@ -458452,6 +458552,9 @@ function PersistentFooterIndicator({ messagesRef }) {
|
|
|
458452
458552
|
const timer = setTimeout(() => setShowEffort(false), EFFORT_DISPLAY_MS);
|
|
458453
458553
|
return () => clearTimeout(timer);
|
|
458454
458554
|
}, [effortText]);
|
|
458555
|
+
if (npmHintActive) {
|
|
458556
|
+
return null;
|
|
458557
|
+
}
|
|
458455
458558
|
if (showEffort && effortText) {
|
|
458456
458559
|
return /* @__PURE__ */ jsx_dev_runtime393.jsxDEV(ThemedBox_default, {
|
|
458457
458560
|
flexShrink: 0,
|
|
@@ -459952,7 +460055,7 @@ function PromptInputFooter({
|
|
|
459952
460055
|
children: [
|
|
459953
460056
|
/* @__PURE__ */ jsx_dev_runtime398.jsxDEV(ThemedBox_default, {
|
|
459954
460057
|
flexDirection: "column",
|
|
459955
|
-
flexShrink:
|
|
460058
|
+
flexShrink: 0,
|
|
459956
460059
|
children: [
|
|
459957
460060
|
mode === "prompt" && !isShort && !exitMessage.show && !isPasting && statusLineShouldDisplay(settings) && /* @__PURE__ */ jsx_dev_runtime398.jsxDEV(StatusLine, {
|
|
459958
460061
|
messagesRef,
|
|
@@ -472285,11 +472388,11 @@ async function _temp188() {
|
|
|
472285
472388
|
timeoutMs: 15000,
|
|
472286
472389
|
key: "npm-deprecation-warning",
|
|
472287
472390
|
text: NPM_DEPRECATION_MESSAGE,
|
|
472288
|
-
color: "
|
|
472391
|
+
color: "inactive",
|
|
472289
472392
|
priority: "high"
|
|
472290
472393
|
};
|
|
472291
472394
|
}
|
|
472292
|
-
var NPM_DEPRECATION_MESSAGE = "AtlasCode is installed via npm (npm install -g @atlasharness/atlascode). See https://github.com/vincentlau2046/AtlasCode/blob/master/docs/reference/overview.md for install and update options.";
|
|
472395
|
+
var NPM_DEPRECATION_MESSAGE = "AtlasCode is installed via npm (npm install -g @atlasharness/atlascode; run `atlascode` or alias `atlas`). See https://github.com/vincentlau2046/AtlasCode/blob/master/docs/reference/overview.md for install and update options.";
|
|
472293
472396
|
var init_useNpmDeprecationNotification = __esm(() => {
|
|
472294
472397
|
init_doctorDiagnostic();
|
|
472295
472398
|
init_envUtils2();
|
|
@@ -489231,8 +489334,10 @@ function initializeEntrypoint2(isNonInteractive) {
|
|
|
489231
489334
|
process.env.ATLAS_ENTRYPOINT = isNonInteractive ? "sdk-cli" : "cli";
|
|
489232
489335
|
}
|
|
489233
489336
|
async function main2() {
|
|
489234
|
-
|
|
489337
|
+
if (isDebugMode()) {
|
|
489338
|
+
process.stderr.write(`[${PRODUCT_BRAND}] main() starting...
|
|
489235
489339
|
`);
|
|
489340
|
+
}
|
|
489236
489341
|
profileCheckpoint("main_function_start");
|
|
489237
489342
|
process.env.NoDefaultCurrentDirectoryInExePath = "1";
|
|
489238
489343
|
initializeWarningHandler();
|
package/package.json
CHANGED