@aexol/spectral 0.9.231 → 0.9.240

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 (157) hide show
  1. package/README.md +47 -0
  2. package/dist/agent/index.d.ts +32 -5
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +209 -36
  5. package/dist/backend/generated-images.d.ts +1 -1
  6. package/dist/backend/generated-images.d.ts.map +1 -1
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +18 -4
  10. package/dist/commands/desktop.d.ts +167 -0
  11. package/dist/commands/desktop.d.ts.map +1 -0
  12. package/dist/commands/desktop.js +540 -0
  13. package/dist/commands/serve.d.ts +9 -1
  14. package/dist/commands/serve.d.ts.map +1 -1
  15. package/dist/commands/serve.js +90 -2
  16. package/dist/commands/update.d.ts +85 -5
  17. package/dist/commands/update.d.ts.map +1 -1
  18. package/dist/commands/update.js +288 -58
  19. package/dist/extensions/desktop-control/macos.d.ts.map +1 -1
  20. package/dist/extensions/desktop-control/macos.js +2 -2
  21. package/dist/extensions/logic-trace.d.ts +1 -1
  22. package/dist/extensions/logic-trace.d.ts.map +1 -1
  23. package/dist/extensions/logic-trace.js +199 -70
  24. package/dist/extensions/video-generation/index.d.ts +3 -0
  25. package/dist/extensions/video-generation/index.d.ts.map +1 -0
  26. package/dist/extensions/video-generation/index.js +299 -0
  27. package/dist/generated/zeus/const.d.ts.map +1 -1
  28. package/dist/generated/zeus/const.js +30 -0
  29. package/dist/generated/zeus/index.d.ts +140 -0
  30. package/dist/generated/zeus/index.d.ts.map +1 -1
  31. package/dist/generated/zeus/index.js +5 -0
  32. package/dist/mcp/server-manager.d.ts.map +1 -1
  33. package/dist/mcp/server-manager.js +6 -0
  34. package/dist/memory/tools/receive-agent-observations.d.ts.map +1 -1
  35. package/dist/memory/tools/receive-agent-observations.js +12 -2
  36. package/dist/relay/dispatcher.d.ts +13 -1
  37. package/dist/relay/dispatcher.d.ts.map +1 -1
  38. package/dist/relay/dispatcher.js +41 -2
  39. package/dist/sdk/agent-core/agent-loop.js +13 -3
  40. package/dist/sdk/agent-core/agent.d.ts +11 -4
  41. package/dist/sdk/agent-core/agent.d.ts.map +1 -1
  42. package/dist/sdk/agent-core/agent.js +16 -4
  43. package/dist/sdk/agent-core/tool-call-registry.d.ts +75 -0
  44. package/dist/sdk/agent-core/tool-call-registry.d.ts.map +1 -0
  45. package/dist/sdk/agent-core/tool-call-registry.js +131 -0
  46. package/dist/sdk/agent-core/tool-execution.d.ts.map +1 -1
  47. package/dist/sdk/agent-core/tool-execution.js +103 -4
  48. package/dist/sdk/agent-core/types.d.ts +15 -4
  49. package/dist/sdk/agent-core/types.d.ts.map +1 -1
  50. package/dist/sdk/ai/index.d.ts +3 -0
  51. package/dist/sdk/ai/index.d.ts.map +1 -1
  52. package/dist/sdk/ai/index.js +3 -0
  53. package/dist/sdk/ai/providers/faux.d.ts.map +1 -1
  54. package/dist/sdk/ai/providers/faux.js +3 -0
  55. package/dist/sdk/ai/providers/leaked-tool-call-parser.d.ts +39 -6
  56. package/dist/sdk/ai/providers/leaked-tool-call-parser.d.ts.map +1 -1
  57. package/dist/sdk/ai/providers/leaked-tool-call-parser.js +159 -18
  58. package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
  59. package/dist/sdk/ai/providers/openai-completions.js +22 -8
  60. package/dist/sdk/ai/providers/openrouter-videos.d.ts +3 -0
  61. package/dist/sdk/ai/providers/openrouter-videos.d.ts.map +1 -0
  62. package/dist/sdk/ai/providers/openrouter-videos.js +412 -0
  63. package/dist/sdk/ai/providers/register-builtins.d.ts.map +1 -1
  64. package/dist/sdk/ai/providers/register-builtins.js +6 -0
  65. package/dist/sdk/ai/providers/simple-options.d.ts +1 -6
  66. package/dist/sdk/ai/providers/simple-options.d.ts.map +1 -1
  67. package/dist/sdk/ai/providers/simple-options.js +0 -22
  68. package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -1
  69. package/dist/sdk/ai/providers/transform-messages.js +52 -1
  70. package/dist/sdk/ai/types.d.ts +91 -10
  71. package/dist/sdk/ai/types.d.ts.map +1 -1
  72. package/dist/sdk/ai/video-models.d.ts +10 -0
  73. package/dist/sdk/ai/video-models.d.ts.map +1 -0
  74. package/dist/sdk/ai/video-models.generated.d.ts +440 -0
  75. package/dist/sdk/ai/video-models.generated.d.ts.map +1 -0
  76. package/dist/sdk/ai/video-models.generated.js +441 -0
  77. package/dist/sdk/ai/video-models.js +22 -0
  78. package/dist/sdk/ai/videos-api-registry.d.ts +14 -0
  79. package/dist/sdk/ai/videos-api-registry.d.ts.map +1 -0
  80. package/dist/sdk/ai/videos-api-registry.js +21 -0
  81. package/dist/sdk/ai/videos.d.ts +4 -0
  82. package/dist/sdk/ai/videos.d.ts.map +1 -0
  83. package/dist/sdk/ai/videos.js +13 -0
  84. package/dist/sdk/coding-agent/core/agent-session.d.ts +8 -0
  85. package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -1
  86. package/dist/sdk/coding-agent/core/agent-session.js +11 -0
  87. package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -1
  88. package/dist/sdk/coding-agent/core/extensions/loader.js +14 -0
  89. package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts +26 -0
  90. package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts.map +1 -1
  91. package/dist/sdk/coding-agent/core/extensions/native-extensions.js +23 -0
  92. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts +2 -2
  93. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts.map +1 -1
  94. package/dist/sdk/coding-agent/core/extensions/types.d.ts +12 -2
  95. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  96. package/dist/sdk/coding-agent/core/messages.d.ts.map +1 -1
  97. package/dist/sdk/coding-agent/core/messages.js +42 -2
  98. package/dist/sdk/coding-agent/core/resource-loader.d.ts +11 -0
  99. package/dist/sdk/coding-agent/core/resource-loader.d.ts.map +1 -1
  100. package/dist/sdk/coding-agent/core/resource-loader.js +23 -6
  101. package/dist/sdk/coding-agent/core/sdk.d.ts +24 -2
  102. package/dist/sdk/coding-agent/core/sdk.d.ts.map +1 -1
  103. package/dist/sdk/coding-agent/core/sdk.js +15 -3
  104. package/dist/sdk/coding-agent/core/settings-manager.d.ts +0 -8
  105. package/dist/sdk/coding-agent/core/settings-manager.d.ts.map +1 -1
  106. package/dist/sdk/coding-agent/core/settings-manager.js +3 -3
  107. package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -1
  108. package/dist/sdk/coding-agent/core/system-prompt.js +5 -0
  109. package/dist/sdk/coding-agent/index.d.ts +2 -2
  110. package/dist/sdk/coding-agent/index.d.ts.map +1 -1
  111. package/dist/sdk/coding-agent/index.js +1 -1
  112. package/dist/sdk-public.d.ts +96 -0
  113. package/dist/sdk-public.d.ts.map +1 -0
  114. package/dist/sdk-public.js +109 -0
  115. package/dist/server/agent-bridge/rehydrate.d.ts +2 -2
  116. package/dist/server/agent-bridge/rehydrate.d.ts.map +1 -1
  117. package/dist/server/agent-bridge/rehydrate.js +14 -0
  118. package/dist/server/agent-bridge/tps-metrics.d.ts +34 -0
  119. package/dist/server/agent-bridge/tps-metrics.d.ts.map +1 -1
  120. package/dist/server/agent-bridge/tps-metrics.js +22 -0
  121. package/dist/server/agent-bridge.d.ts +17 -2
  122. package/dist/server/agent-bridge.d.ts.map +1 -1
  123. package/dist/server/agent-bridge.js +108 -5
  124. package/dist/server/handlers/paths-list.d.ts +1 -1
  125. package/dist/server/handlers/paths-list.js +1 -1
  126. package/dist/server/inter-agent-broker.d.ts +12 -0
  127. package/dist/server/inter-agent-broker.d.ts.map +1 -1
  128. package/dist/server/inter-agent-broker.js +1 -0
  129. package/dist/server/preset-chain.d.ts +151 -0
  130. package/dist/server/preset-chain.d.ts.map +1 -0
  131. package/dist/server/preset-chain.js +250 -0
  132. package/dist/server/session-stream.d.ts +74 -1
  133. package/dist/server/session-stream.d.ts.map +1 -1
  134. package/dist/server/session-stream.js +238 -24
  135. package/dist/server/storage/rows.d.ts +2 -0
  136. package/dist/server/storage/rows.d.ts.map +1 -1
  137. package/dist/server/storage/schema.d.ts +2 -2
  138. package/dist/server/storage/schema.d.ts.map +1 -1
  139. package/dist/server/storage/schema.js +2 -1
  140. package/dist/server/storage.d.ts +7 -0
  141. package/dist/server/storage.d.ts.map +1 -1
  142. package/dist/server/storage.js +142 -9
  143. package/dist/server/wire.d.ts +84 -0
  144. package/dist/server/wire.d.ts.map +1 -1
  145. package/dist/utils/augment-path.d.ts +51 -0
  146. package/dist/utils/augment-path.d.ts.map +1 -0
  147. package/dist/utils/augment-path.js +234 -0
  148. package/dist/utils/open-browser.d.ts +55 -0
  149. package/dist/utils/open-browser.d.ts.map +1 -0
  150. package/dist/utils/open-browser.js +163 -0
  151. package/dist/utils/serve-state.d.ts +264 -0
  152. package/dist/utils/serve-state.d.ts.map +1 -0
  153. package/dist/utils/serve-state.js +563 -0
  154. package/dist/utils/standalone.d.ts +14 -0
  155. package/dist/utils/standalone.d.ts.map +1 -0
  156. package/dist/utils/standalone.js +23 -0
  157. package/package.json +7 -3
package/dist/cli.js CHANGED
@@ -8,6 +8,8 @@
8
8
  * - `spectral login` → interactive auth flow (writes ~/.spectral/config.json)
9
9
  * - `spectral logout` → deletes ~/.spectral/config.json
10
10
  * - `spectral serve` → start the Aexol relay WebSocket server (headless)
11
+ * - `spectral desktop`→ start `serve` detached + open the Studio UI in the
12
+ * browser (the thin replacement for the old desktop app)
11
13
  * - `spectral bind` → link directory to an Aexol Studio project
12
14
  * - `spectral unbind` → remove Aexol Studio project binding
13
15
  * - `spectral --version` / `--help` → branded short-circuits, no auth needed.
@@ -16,8 +18,7 @@
16
18
  import { getVersion } from "./version.js";
17
19
  // ---- Read our own version ----------------------------------------------------
18
20
  // Centralized in src/version.ts so the standalone Bun binary, the npm
19
- // install, and the electron app all resolve the same real version instead of
20
- // silently falling back to "0.0.0".
21
+ // install all resolve the same real version instead of falling back to "0.0.0".
21
22
  const VERSION = getVersion();
22
23
  const TAGLINE = "Coding agent that never sleeps";
23
24
  // ---- Branded helpers ---------------------------------------------------------
@@ -33,6 +34,7 @@ function printHeader() {
33
34
  " spectral login Interactive authentication (team API key or OAuth)",
34
35
  " spectral logout Remove stored Aexol credentials",
35
36
  " spectral serve Connect this machine to the Aexol relay backend",
37
+ " spectral desktop Start the agent in the background and open the UI",
36
38
  " spectral bind Link this directory to an Aexol Studio project",
37
39
  " spectral unbind Remove the Aexol Studio project binding",
38
40
  " spectral update Check for and install the latest Spectral version",
@@ -40,8 +42,9 @@ function printHeader() {
40
42
  " spectral --version Print version and exit",
41
43
  " spectral --help Print this help and exit",
42
44
  "",
43
- "TUI/interactive mode has been removed. Use `spectral serve` and connect",
44
- "via the Aexol Studio web frontend or relay WebSocket.",
45
+ "TUI/interactive mode has been removed. Use `spectral desktop` to work in",
46
+ "the Aexol Studio web frontend, or `spectral serve` to only connect this",
47
+ "machine to the relay backend.",
45
48
  "",
46
49
  ].join("\n"));
47
50
  }
@@ -99,6 +102,17 @@ async function main() {
99
102
  await runServeCli(args.slice(1));
100
103
  return;
101
104
  }
105
+ if (first === "desktop") {
106
+ const { runDesktop } = await import("./commands/desktop.js");
107
+ // Thin wrapper: it spawns a detached `spectral serve`, waits for its
108
+ // readiness marker, opens the browser, then exits. The exit code tells the
109
+ // shell whether the agent came up.
110
+ // `exitCode` (not `process.exit`) so buffered stdout is flushed and any
111
+ // pending cleanup still runs — the wrapper has nothing left open, but a
112
+ // hard exit here would truncate the message on a slow terminal.
113
+ process.exitCode = await runDesktop(args.slice(1));
114
+ return;
115
+ }
102
116
  if (first === "bind") {
103
117
  const { runBind } = await import("./commands/bind.js");
104
118
  await runBind(args.slice(1));
@@ -0,0 +1,167 @@
1
+ /**
2
+ * `spectral desktop` — the thin, headless replacement for the Electron shell.
3
+ *
4
+ * What the Electron app actually contributed was four things, all reproduced
5
+ * here without a bundled Chromium:
6
+ *
7
+ * 1. single-instance guarantee → `~/.spectral/serve.pid` + liveness check
8
+ * 1. single-instance guarantee → `~/.spectral/serve.pid`, claimed
9
+ * atomically (`O_EXCL`) before the spawn
10
+ * 2. start the local relay daemon → detached `spectral serve`, unref'd,
11
+ * stdout+stderr appended to serve.log
12
+ * 3. "wait until it is really up" → the `SPECTRAL_SERVE_READY` stdout marker
13
+ * and `serve-ready.json` (see
14
+ * src/utils/serve-state.ts), replacing the
15
+ * old "assume ready after 3 s" heuristic
16
+ * 4. show the UI → open the system browser at
17
+ * https://aexol.ai/agent
18
+ * (override: SPECTRAL_LANDING_URL)
19
+ *
20
+ * The PATH augmentation the app performed for its child process now happens in
21
+ * `augmentPath()` (src/utils/augment-path.ts) and is applied to the spawned
22
+ * daemon, so MCP servers launched via `npx` keep working.
23
+ *
24
+ * What is deliberately NOT reproduced (see the removal notes): the splash
25
+ * window, in-app auto-update (use `spectral update`), the native app menu, and
26
+ * the JWT-via-IPC login bridge — authentication goes through the existing
27
+ * `spectral login` browser flow, which already writes `userJwt` to
28
+ * `~/.spectral/config.json`.
29
+ *
30
+ * Exit codes: 0 success / already running, 1 failure, 3 stopped-state for
31
+ * `status` when the daemon is not running.
32
+ */
33
+ import { type SpectralConfig } from "../config.js";
34
+ import { type OpenBrowserResult } from "../utils/open-browser.js";
35
+ import { type ServeReadyResult, type ServeGenealogy } from "../utils/serve-state.js";
36
+ /** Where the Studio agent UI lives. */
37
+ export declare const DEFAULT_LANDING_URL = "https://aexol.ai/agent";
38
+ /** How long to wait for the daemon's readiness signal. */
39
+ export declare const DEFAULT_READY_TIMEOUT_MS = 15000;
40
+ /** Grace period between SIGTERM and SIGKILL in `desktop stop`. */
41
+ export declare const DEFAULT_STOP_TIMEOUT_MS = 10000;
42
+ /**
43
+ * Set in the daemon's env to the wrapper's own pid. The daemon sees the
44
+ * placeholder we left in `serve.pid` and must not read it as "another serve is
45
+ * running" — it is the claim of the process that just launched it.
46
+ */
47
+ export declare const SERVE_PID_CLAIM_ENV = "SPECTRAL_SERVE_PID_CLAIM";
48
+ export declare function getLandingUrl(env?: NodeJS.ProcessEnv): string;
49
+ /** Render a grace window the way it is actually configured (10s, 250ms). */
50
+ export declare function formatGraceMs(ms: number): string;
51
+ export interface ServeSpawnPlan {
52
+ command: string;
53
+ args: string[];
54
+ cwd: string;
55
+ env: NodeJS.ProcessEnv;
56
+ logFile: string;
57
+ }
58
+ interface ResolveCommandInput {
59
+ execPath?: string;
60
+ execArgv?: readonly string[];
61
+ argv1?: string;
62
+ standalone?: boolean;
63
+ /** Entry points to try, in order (already-resolved absolute paths). */
64
+ candidates?: string[];
65
+ exists?: (path: string) => boolean;
66
+ }
67
+ /**
68
+ * Decide how to launch a detached `spectral serve`.
69
+ *
70
+ * Three launch shapes must all work:
71
+ * - standalone Bun binary → exec the binary itself with `serve`
72
+ * - npm install (`spectral` bin → dist/cli.js) → `node <cli.js> serve`
73
+ * - `npm run dev` (tsx src/cli.ts) → re-run the very entry the user invoked,
74
+ * with `process.execArgv` so the tsx loader is carried over
75
+ *
76
+ * @returns the spawn plan's command/args portion. Falls back to whatever
77
+ * `spectral` is on PATH when no entry point can be identified.
78
+ */
79
+ export declare function resolveServeCommand(input?: ResolveCommandInput): {
80
+ command: string;
81
+ args: string[];
82
+ };
83
+ /** Compose the full plan for spawning the daemon. */
84
+ export declare function planServeSpawn(env?: NodeJS.ProcessEnv, input?: ResolveCommandInput): ServeSpawnPlan;
85
+ /**
86
+ * Will this spawn re-exec into the daemon instead of becoming it directly?
87
+ *
88
+ * Matters for readiness: a standalone binary and `node dist/cli.js serve` are
89
+ * the daemon, so their exit is a hard failure we can report instantly. Under
90
+ * `npm run dev` (`tsx src/cli.ts`) the child is a loader wrapper that execs
91
+ * something else — its death tells us nothing, and only the ready signal or the
92
+ * timeout may decide.
93
+ */
94
+ export declare function spawnExpectsReExec(plan: ServeSpawnPlan): boolean;
95
+ /**
96
+ * Launch the daemon detached from this terminal so it survives the wrapper
97
+ * exiting (that is the whole point: close the shell, the agent stays up).
98
+ * Returns the child pid, or null when the spawn itself failed.
99
+ */
100
+ export declare function spawnDetachedServe(plan: ServeSpawnPlan): number | null;
101
+ export interface DesktopDeps {
102
+ env?: NodeJS.ProcessEnv;
103
+ spawnServe?: (plan: ServeSpawnPlan) => number | null;
104
+ waitForReady?: (opts: {
105
+ pid: number;
106
+ logFile: string;
107
+ logOffset: number;
108
+ /** Timestamp captured before the spawn, for ready-signal freshness. */
109
+ sinceMs: number;
110
+ /** True when the child re-execs, so its own exit proves nothing. */
111
+ expectReExec: boolean;
112
+ timeoutMs: number;
113
+ }) => Promise<ServeReadyResult>;
114
+ openUrl?: (url: string) => Promise<OpenBrowserResult>;
115
+ /** Interactive `spectral login`. */
116
+ runLogin?: () => Promise<void>;
117
+ readCfg?: () => Promise<SpectralConfig | null>;
118
+ signal?: (pid: number, signal: NodeJS.Signals) => void;
119
+ alive?: (pid: number) => boolean;
120
+ sleep?: (ms: number) => Promise<void>;
121
+ /** Override the SIGTERM→SIGKILL grace window (tests, exotic supervisors). */
122
+ stopGraceMs?: number;
123
+ /**
124
+ * Injectable genealogy verdict for the serve.pid hand-off confirmation. The
125
+ * real probe walks `ps -o ppid=` and can transiently fail under parallel
126
+ * test load, so tests pin the verdict to keep the
127
+ * `daemon`/`foreign`/`unknown` classification deterministic.
128
+ */
129
+ genealogy?: (pid: number, ancestors: number[]) => ServeGenealogy;
130
+ planInput?: ResolveCommandInput;
131
+ out?: (text: string) => void;
132
+ err?: (text: string) => void;
133
+ isInteractive?: () => boolean;
134
+ }
135
+ export interface TerminateAgentOptions {
136
+ /** Pid to stop — always the one from the pid file, never a stale handle. */
137
+ pid: number;
138
+ /** SIGTERM grace window before SIGKILL. */
139
+ graceMs: number;
140
+ alive: (pid: number) => boolean;
141
+ signal: (pid: number, signal: NodeJS.Signals) => void;
142
+ sleep: (ms: number) => Promise<void>;
143
+ out?: (text: string) => void;
144
+ /** Poll interval while waiting for the daemon to drain. */
145
+ pollMs?: number;
146
+ /** How long to wait after SIGKILL before giving up. */
147
+ killWaitMs?: number;
148
+ }
149
+ export type TerminateAgentOutcome = "stopped" | "killed" | "failed";
150
+ /**
151
+ * SIGTERM → wait out the drain → SIGKILL. Shared by `desktop stop` and by the
152
+ * start path's "it never came up, do not leave it half-started" branch — the
153
+ * old start path fired a bare SIGTERM and walked away, which left a detached
154
+ * daemon that ignored TERM (or won the race) running behind a failed command.
155
+ *
156
+ * The wait is bounded by a poll COUNT rather than a wall-clock deadline, so a
157
+ * caller with a synchronous `sleep` (tests) is both fast and deterministic.
158
+ */
159
+ export declare function terminateAgentPid(opts: TerminateAgentOptions): Promise<TerminateAgentOutcome>;
160
+ /**
161
+ * `spectral desktop [start|status|stop]`
162
+ *
163
+ * @returns process exit code; `cli.ts` assigns it to `process.exitCode`.
164
+ */
165
+ export declare function runDesktop(args?: string[], deps?: DesktopDeps): Promise<number>;
166
+ export {};
167
+ //# sourceMappingURL=desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../src/commands/desktop.ts"],"names":[],"mappings":"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"}