laohuang 0.4.2 → 0.5.1

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 (85) hide show
  1. package/README.md +13 -141
  2. package/dist/bin.js +12028 -0
  3. package/dist/bin.js.map +7 -0
  4. package/package.json +28 -18
  5. package/dist/agent.d.ts +0 -166
  6. package/dist/agent.js +0 -858
  7. package/dist/agent.js.map +0 -1
  8. package/dist/bash-runner.d.ts +0 -79
  9. package/dist/bash-runner.js +0 -464
  10. package/dist/bash-runner.js.map +0 -1
  11. package/dist/cancellation.d.ts +0 -36
  12. package/dist/cancellation.js +0 -123
  13. package/dist/cancellation.js.map +0 -1
  14. package/dist/cli.d.ts +0 -117
  15. package/dist/cli.js +0 -1307
  16. package/dist/cli.js.map +0 -1
  17. package/dist/client.d.ts +0 -21
  18. package/dist/client.js +0 -17
  19. package/dist/client.js.map +0 -1
  20. package/dist/commands.d.ts +0 -123
  21. package/dist/commands.js +0 -660
  22. package/dist/commands.js.map +0 -1
  23. package/dist/config.d.ts +0 -51
  24. package/dist/config.js +0 -183
  25. package/dist/config.js.map +0 -1
  26. package/dist/credentials.d.ts +0 -12
  27. package/dist/credentials.js +0 -102
  28. package/dist/credentials.js.map +0 -1
  29. package/dist/events.d.ts +0 -288
  30. package/dist/events.js +0 -838
  31. package/dist/events.js.map +0 -1
  32. package/dist/model-adapter.d.ts +0 -138
  33. package/dist/model-adapter.js +0 -244
  34. package/dist/model-adapter.js.map +0 -1
  35. package/dist/model-selection.d.ts +0 -67
  36. package/dist/model-selection.js +0 -148
  37. package/dist/model-selection.js.map +0 -1
  38. package/dist/model-stream.d.ts +0 -128
  39. package/dist/model-stream.js +0 -582
  40. package/dist/model-stream.js.map +0 -1
  41. package/dist/project-instructions.d.ts +0 -99
  42. package/dist/project-instructions.js +0 -348
  43. package/dist/project-instructions.js.map +0 -1
  44. package/dist/providers.d.ts +0 -9
  45. package/dist/providers.js +0 -26
  46. package/dist/providers.js.map +0 -1
  47. package/dist/routing.d.ts +0 -170
  48. package/dist/routing.js +0 -669
  49. package/dist/routing.js.map +0 -1
  50. package/dist/semantic-classifier.d.ts +0 -66
  51. package/dist/semantic-classifier.js +0 -86
  52. package/dist/semantic-classifier.js.map +0 -1
  53. package/dist/session.d.ts +0 -162
  54. package/dist/session.js +0 -871
  55. package/dist/session.js.map +0 -1
  56. package/dist/system-prompt.d.ts +0 -16
  57. package/dist/system-prompt.js +0 -42
  58. package/dist/system-prompt.js.map +0 -1
  59. package/dist/terminal/editor.d.ts +0 -161
  60. package/dist/terminal/editor.js +0 -1060
  61. package/dist/terminal/editor.js.map +0 -1
  62. package/dist/terminal/input.d.ts +0 -61
  63. package/dist/terminal/input.js +0 -276
  64. package/dist/terminal/input.js.map +0 -1
  65. package/dist/terminal/markdown.d.ts +0 -20
  66. package/dist/terminal/markdown.js +0 -621
  67. package/dist/terminal/markdown.js.map +0 -1
  68. package/dist/terminal/screen.d.ts +0 -66
  69. package/dist/terminal/screen.js +0 -624
  70. package/dist/terminal/screen.js.map +0 -1
  71. package/dist/terminal/theme.d.ts +0 -23
  72. package/dist/terminal/theme.js +0 -101
  73. package/dist/terminal/theme.js.map +0 -1
  74. package/dist/terminal/ui.d.ts +0 -287
  75. package/dist/terminal/ui.js +0 -1819
  76. package/dist/terminal/ui.js.map +0 -1
  77. package/dist/tools.d.ts +0 -95
  78. package/dist/tools.js +0 -444
  79. package/dist/tools.js.map +0 -1
  80. package/dist/ui-state.d.ts +0 -51
  81. package/dist/ui-state.js +0 -194
  82. package/dist/ui-state.js.map +0 -1
  83. package/dist/web.d.ts +0 -56
  84. package/dist/web.js +0 -247
  85. package/dist/web.js.map +0 -1
@@ -1,123 +0,0 @@
1
- /** Cooperative, task-scoped cancellation primitives. */
2
- /** Raised by {@link CancelToken.throwIfCancelled}. */
3
- export class CancellationError extends Error {
4
- constructor(message) {
5
- super(message);
6
- this.name = "CancellationError";
7
- }
8
- }
9
- /**
10
- * An idempotent, single-threaded cancellation token.
11
- *
12
- * Registered callbacks run synchronously in the call stack that wins the
13
- * first call to {@link cancel}. A callback registered after cancellation
14
- * runs immediately, before {@link register} returns.
15
- */
16
- export class CancelToken {
17
- #cancelled = false;
18
- #reason = null;
19
- #requestedAt = null;
20
- #callbacks = new Map();
21
- #nextCallbackId = 0;
22
- #waiters = new Set();
23
- #controller = new AbortController();
24
- get reason() {
25
- return this.#reason;
26
- }
27
- /** `performance.now()` timestamp of the first cancel, or null. */
28
- get requestedAt() {
29
- return this.#requestedAt;
30
- }
31
- get cancelled() {
32
- return this.#cancelled;
33
- }
34
- /** AbortSignal view of the token, for APIs that accept one. */
35
- get signal() {
36
- return this.#controller.signal;
37
- }
38
- isCancelled() {
39
- return this.#cancelled;
40
- }
41
- /**
42
- * Request cancellation. Returns true for the first (winning) call and
43
- * false for every subsequent call.
44
- */
45
- cancel(reason = "cancelled") {
46
- const effectiveReason = reason || "cancelled";
47
- if (this.#cancelled) {
48
- return false;
49
- }
50
- this.#reason = effectiveReason;
51
- this.#requestedAt = performance.now();
52
- const callbacks = [...this.#callbacks.values()];
53
- this.#callbacks.clear();
54
- this.#cancelled = true;
55
- this.#controller.abort(new CancellationError(effectiveReason));
56
- for (const callback of callbacks) {
57
- try {
58
- callback(effectiveReason);
59
- }
60
- catch {
61
- // Cancellation must remain effective even if a cleanup hook is
62
- // faulty; owners can report their own cleanup failures.
63
- continue;
64
- }
65
- }
66
- for (const resolve of this.#waiters) {
67
- resolve();
68
- }
69
- this.#waiters.clear();
70
- return true;
71
- }
72
- /**
73
- * Resolve true once the token is cancelled. With `timeoutMs`, resolve
74
- * false instead when the timeout elapses first.
75
- */
76
- wait(timeoutMs) {
77
- if (this.#cancelled) {
78
- return Promise.resolve(true);
79
- }
80
- return new Promise((resolve) => {
81
- let timer;
82
- const onCancel = () => {
83
- if (timer !== undefined) {
84
- clearTimeout(timer);
85
- }
86
- this.#waiters.delete(onCancel);
87
- resolve(true);
88
- };
89
- this.#waiters.add(onCancel);
90
- if (timeoutMs !== undefined) {
91
- timer = setTimeout(() => {
92
- this.#waiters.delete(onCancel);
93
- resolve(false);
94
- }, timeoutMs);
95
- }
96
- });
97
- }
98
- throwIfCancelled() {
99
- if (this.#cancelled) {
100
- throw new CancellationError(this.#reason ?? "cancelled");
101
- }
102
- }
103
- /** Register a cancellation hook and return an unregister function. */
104
- register(callback) {
105
- if (this.#cancelled) {
106
- const reason = this.#reason ?? "cancelled";
107
- try {
108
- callback(reason);
109
- }
110
- catch {
111
- // Late-registered hooks must not break the registering caller.
112
- }
113
- return () => { };
114
- }
115
- this.#nextCallbackId += 1;
116
- const callbackId = this.#nextCallbackId;
117
- this.#callbacks.set(callbackId, callback);
118
- return () => {
119
- this.#callbacks.delete(callbackId);
120
- };
121
- }
122
- }
123
- //# sourceMappingURL=cancellation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../src/cancellation.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts DELETED
@@ -1,117 +0,0 @@
1
- #!/usr/bin/env node
2
- /** Command-line interface and subcommands for laoHuangCode. */
3
- import { type ClientConnectionSettings } from "./client.ts";
4
- import { type QueueStatus } from "./commands.ts";
5
- import { type InputFn as PromptFn } from "./model-selection.ts";
6
- import { type Submission } from "./session.ts";
7
- import { PlainEventSink, TerminalUI } from "./terminal/ui.ts";
8
- export declare const VERSION: string;
9
- type InputFn = (prompt: string) => string | Promise<string>;
10
- type OutputFn = (message: string) => void;
11
- export interface TerminalSupportOptions {
12
- inputFn?: InputFn | undefined;
13
- outputFn?: OutputFn | undefined;
14
- stdin?: {
15
- isTTY?: boolean | undefined;
16
- } | undefined;
17
- stdout?: {
18
- isTTY?: boolean | undefined;
19
- } | undefined;
20
- }
21
- /** Only enable the interactive UI for the process's real TTY streams. */
22
- export declare function supportsTerminalUI(options?: TerminalSupportOptions): boolean;
23
- export interface ReplAgentLike {
24
- run(text: string): string | Promise<string>;
25
- }
26
- export interface ReplUiLike {
27
- showWelcome(): void;
28
- prompt(): string | Promise<string>;
29
- showGoodbye(): void;
30
- showInterrupted(options?: {
31
- operation?: boolean;
32
- }): void;
33
- showError(message: string): void;
34
- showAssistant(response: string): void;
35
- write(message: string): void;
36
- thinking?(): {
37
- close(): void;
38
- } | null;
39
- }
40
- export declare function runRepl(agent: ReplAgentLike, options?: {
41
- commandHandler?: ((command: string) => boolean | Promise<boolean>) | undefined;
42
- inputFn?: ((prompt: string) => string | Promise<string>) | undefined;
43
- outputFn?: OutputFn | undefined;
44
- ui?: ReplUiLike | undefined;
45
- }): Promise<void>;
46
- /** Minimal structural view of AgentSession the REPL loops rely on. */
47
- export interface SessionReplSession {
48
- readonly eventBus: {
49
- flush(): Promise<unknown>;
50
- };
51
- submitInput(content: string): Promise<Submission>;
52
- queueStatus(): QueueStatus;
53
- publishNotice(text: string, options?: {
54
- style?: string;
55
- }): unknown;
56
- waitForIdle(timeoutMs?: number): Promise<boolean>;
57
- close(options?: {
58
- wait?: boolean;
59
- timeoutMs?: number;
60
- }): Promise<boolean>;
61
- }
62
- export interface SessionUiLike {
63
- commandRegistry?: unknown;
64
- renderError?: unknown;
65
- showWelcome?(): void;
66
- showGoodbye?(): void;
67
- showError?(message: string): void;
68
- prompt?(): string | Promise<string>;
69
- run?(onSubmit: (text: string) => void): void | Promise<void>;
70
- requestExit?(): void;
71
- close?(): void;
72
- startEventRenderer?(): void;
73
- stopEventRenderer?(): void;
74
- flushEventRenderer?(): void;
75
- }
76
- export type CommandHandler = (command: string) => boolean | Promise<boolean>;
77
- /** Keep accepting input while AgentSession executes in the background. */
78
- export declare function runSessionRepl(session: SessionReplSession, options: {
79
- commandHandler?: CommandHandler | undefined;
80
- ui: SessionUiLike;
81
- /** Override for driving a UI whose run() does not read real stdin. */
82
- runUi?: ((onSubmit: (text: string) => void) => void | Promise<void>) | undefined;
83
- }): Promise<boolean>;
84
- /** Run the same event-driven session with append-only plain output. */
85
- export declare function runPlainSessionRepl(session: SessionReplSession, options: {
86
- commandHandler?: CommandHandler | undefined;
87
- inputFn?: ((prompt: string) => string | Promise<string>) | undefined;
88
- sink: PlainEventSink;
89
- }): Promise<boolean>;
90
- /**
91
- * Route setup/command questions through the running terminal UI loop
92
- * (mirrors the Python original's `input_fn = terminal_ui.prompt` and
93
- * `session_secret_input_fn = terminal_ui.prompt_secret`). The loop's ask()
94
- * coordinates the question with its editor, so no pause/resume is needed —
95
- * and nothing reads fd 0 behind the driver's raw-mode stream.
96
- */
97
- export declare function terminalUiPrompts(ui: Pick<TerminalUI, "prompt" | "promptSecret">): {
98
- input: PromptFn;
99
- secretInput: PromptFn;
100
- };
101
- export interface MainOptions {
102
- environ?: Record<string, string | undefined> | undefined;
103
- configPath?: string | undefined;
104
- credentialsPath?: string | undefined;
105
- inputFn?: InputFn | undefined;
106
- secretInputFn?: InputFn | undefined;
107
- outputFn?: OutputFn | undefined;
108
- clientFactory?: ((settings: ClientConnectionSettings) => unknown) | undefined;
109
- stdin?: {
110
- isTTY?: boolean | undefined;
111
- } | undefined;
112
- stdout?: {
113
- isTTY?: boolean | undefined;
114
- } | undefined;
115
- }
116
- export declare function main(argv?: readonly string[] | null, options?: MainOptions): Promise<number>;
117
- export {};