@getforgeai/cli 0.1.0-beta.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.
- package/LICENSE +201 -0
- package/README.md +80 -0
- package/dist/bin/forgeai.d.ts +3 -0
- package/dist/bin/forgeai.js +8 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +180 -0
- package/dist/commands/auth-login.d.ts +4 -0
- package/dist/commands/auth-login.js +202 -0
- package/dist/commands/auth-logout.d.ts +2 -0
- package/dist/commands/auth-logout.js +41 -0
- package/dist/commands/auth-status.d.ts +4 -0
- package/dist/commands/auth-status.js +81 -0
- package/dist/commands/cli-list.d.ts +4 -0
- package/dist/commands/cli-list.js +40 -0
- package/dist/commands/cli-unlink.d.ts +4 -0
- package/dist/commands/cli-unlink.js +45 -0
- package/dist/commands/config-set.d.ts +5 -0
- package/dist/commands/config-set.js +63 -0
- package/dist/commands/connect.d.ts +9 -0
- package/dist/commands/connect.js +165 -0
- package/dist/commands/disconnect.d.ts +5 -0
- package/dist/commands/disconnect.js +126 -0
- package/dist/commands/journal-clear.d.ts +2 -0
- package/dist/commands/journal-clear.js +16 -0
- package/dist/commands/journal-list.d.ts +2 -0
- package/dist/commands/journal-list.js +20 -0
- package/dist/commands/journal-status.d.ts +2 -0
- package/dist/commands/journal-status.js +18 -0
- package/dist/commands/mcp-serve.d.ts +13 -0
- package/dist/commands/mcp-serve.js +74 -0
- package/dist/commands/org-list.d.ts +4 -0
- package/dist/commands/org-list.js +56 -0
- package/dist/commands/org-unlink.d.ts +4 -0
- package/dist/commands/org-unlink.js +63 -0
- package/dist/commands/reconnect.d.ts +4 -0
- package/dist/commands/reconnect.js +46 -0
- package/dist/commands/release-open.d.ts +2 -0
- package/dist/commands/release-open.js +43 -0
- package/dist/commands/session-respond.d.ts +2 -0
- package/dist/commands/session-respond.js +29 -0
- package/dist/commands/task-open.d.ts +2 -0
- package/dist/commands/task-open.js +42 -0
- package/dist/commands/vm.d.ts +21 -0
- package/dist/commands/vm.js +122 -0
- package/dist/commands/workflow-open.d.ts +2 -0
- package/dist/commands/workflow-open.js +43 -0
- package/dist/config/config-manager.d.ts +31 -0
- package/dist/config/config-manager.js +70 -0
- package/dist/config/token-manager.d.ts +11 -0
- package/dist/config/token-manager.js +87 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +22 -0
- package/dist/lib/auth-client.d.ts +1670 -0
- package/dist/lib/auth-client.js +10 -0
- package/dist/lib/branch-manager.d.ts +79 -0
- package/dist/lib/branch-manager.js +620 -0
- package/dist/lib/clone-and-checkout.d.ts +6 -0
- package/dist/lib/clone-and-checkout.js +41 -0
- package/dist/lib/connection-manager.d.ts +58 -0
- package/dist/lib/connection-manager.js +436 -0
- package/dist/lib/daemon-entry.d.ts +2 -0
- package/dist/lib/daemon-entry.js +210 -0
- package/dist/lib/daemon.d.ts +38 -0
- package/dist/lib/daemon.js +148 -0
- package/dist/lib/event-journal.d.ts +24 -0
- package/dist/lib/event-journal.js +76 -0
- package/dist/lib/ipc-client.d.ts +10 -0
- package/dist/lib/ipc-client.js +70 -0
- package/dist/lib/ipc-server.d.ts +36 -0
- package/dist/lib/ipc-server.js +70 -0
- package/dist/lib/node-version-guard.d.ts +8 -0
- package/dist/lib/node-version-guard.js +60 -0
- package/dist/lib/open-directory.d.ts +7 -0
- package/dist/lib/open-directory.js +41 -0
- package/dist/lib/repo-manager.d.ts +29 -0
- package/dist/lib/repo-manager.js +103 -0
- package/dist/lib/resilient-emitter.d.ts +53 -0
- package/dist/lib/resilient-emitter.js +160 -0
- package/dist/lib/rest-client.d.ts +164 -0
- package/dist/lib/rest-client.js +139 -0
- package/dist/lib/skill-manager.d.ts +23 -0
- package/dist/lib/skill-manager.js +167 -0
- package/dist/lib/socket-client.d.ts +68 -0
- package/dist/lib/socket-client.js +160 -0
- package/dist/mcp/mcp-probe.d.ts +11 -0
- package/dist/mcp/mcp-probe.js +106 -0
- package/dist/mcp/mcp-response.d.ts +29 -0
- package/dist/mcp/mcp-response.js +67 -0
- package/dist/mcp/mcp-server.d.ts +19 -0
- package/dist/mcp/mcp-server.js +76 -0
- package/dist/mcp/resources/project-conventions.d.ts +4 -0
- package/dist/mcp/resources/project-conventions.js +50 -0
- package/dist/mcp/resources/task-current.d.ts +4 -0
- package/dist/mcp/resources/task-current.js +51 -0
- package/dist/mcp/tools/forge-add-group-dependency.d.ts +4 -0
- package/dist/mcp/tools/forge-add-group-dependency.js +20 -0
- package/dist/mcp/tools/forge-add-task-dependency.d.ts +4 -0
- package/dist/mcp/tools/forge-add-task-dependency.js +20 -0
- package/dist/mcp/tools/forge-ask-human.d.ts +4 -0
- package/dist/mcp/tools/forge-ask-human.js +80 -0
- package/dist/mcp/tools/forge-column-done.d.ts +4 -0
- package/dist/mcp/tools/forge-column-done.js +46 -0
- package/dist/mcp/tools/forge-complete-step.d.ts +4 -0
- package/dist/mcp/tools/forge-complete-step.js +139 -0
- package/dist/mcp/tools/forge-create-task-group.d.ts +4 -0
- package/dist/mcp/tools/forge-create-task-group.js +22 -0
- package/dist/mcp/tools/forge-create-task.d.ts +4 -0
- package/dist/mcp/tools/forge-create-task.js +28 -0
- package/dist/mcp/tools/forge-delete-task-group.d.ts +4 -0
- package/dist/mcp/tools/forge-delete-task-group.js +17 -0
- package/dist/mcp/tools/forge-delete-task.d.ts +4 -0
- package/dist/mcp/tools/forge-delete-task.js +17 -0
- package/dist/mcp/tools/forge-get-task.d.ts +4 -0
- package/dist/mcp/tools/forge-get-task.js +17 -0
- package/dist/mcp/tools/forge-merge-back.d.ts +4 -0
- package/dist/mcp/tools/forge-merge-back.js +179 -0
- package/dist/mcp/tools/forge-release-merge.d.ts +4 -0
- package/dist/mcp/tools/forge-release-merge.js +159 -0
- package/dist/mcp/tools/forge-release-notes.d.ts +4 -0
- package/dist/mcp/tools/forge-release-notes.js +51 -0
- package/dist/mcp/tools/forge-release-tag.d.ts +4 -0
- package/dist/mcp/tools/forge-release-tag.js +125 -0
- package/dist/mcp/tools/forge-remove-group-dependency.d.ts +4 -0
- package/dist/mcp/tools/forge-remove-group-dependency.js +19 -0
- package/dist/mcp/tools/forge-remove-task-dependency.d.ts +4 -0
- package/dist/mcp/tools/forge-remove-task-dependency.js +19 -0
- package/dist/mcp/tools/forge-requeue.d.ts +4 -0
- package/dist/mcp/tools/forge-requeue.js +39 -0
- package/dist/mcp/tools/forge-submit-pr.d.ts +4 -0
- package/dist/mcp/tools/forge-submit-pr.js +68 -0
- package/dist/mcp/tools/forge-update-status.d.ts +4 -0
- package/dist/mcp/tools/forge-update-status.js +77 -0
- package/dist/mcp/tools/forge-update-task-group.d.ts +4 -0
- package/dist/mcp/tools/forge-update-task-group.js +21 -0
- package/dist/mcp/tools/forge-update-task.d.ts +4 -0
- package/dist/mcp/tools/forge-update-task.js +25 -0
- package/dist/mcp/tools/forge-validate-merge.d.ts +4 -0
- package/dist/mcp/tools/forge-validate-merge.js +194 -0
- package/dist/mcp/types.d.ts +39 -0
- package/dist/mcp/types.js +8 -0
- package/dist/methodology/artifact-manager.d.ts +14 -0
- package/dist/methodology/artifact-manager.js +55 -0
- package/dist/orchestrator/agent-registry.d.ts +53 -0
- package/dist/orchestrator/agent-registry.js +96 -0
- package/dist/orchestrator/agent-spawner.d.ts +112 -0
- package/dist/orchestrator/agent-spawner.js +1518 -0
- package/dist/orchestrator/connectors/claude-code-connector.d.ts +3 -0
- package/dist/orchestrator/connectors/claude-code-connector.js +60 -0
- package/dist/orchestrator/connectors/connector.d.ts +95 -0
- package/dist/orchestrator/connectors/connector.js +25 -0
- package/dist/orchestrator/connectors/docker-connector.d.ts +14 -0
- package/dist/orchestrator/connectors/docker-connector.js +337 -0
- package/dist/orchestrator/connectors/native-vm-connector.d.ts +11 -0
- package/dist/orchestrator/connectors/native-vm-connector.js +162 -0
- package/dist/orchestrator/connectors/opencode-connector.d.ts +3 -0
- package/dist/orchestrator/connectors/opencode-connector.js +39 -0
- package/dist/orchestrator/connectors/vm-connector.d.ts +3 -0
- package/dist/orchestrator/connectors/vm-connector.js +139 -0
- package/dist/orchestrator/dispatch-queue.d.ts +43 -0
- package/dist/orchestrator/dispatch-queue.js +93 -0
- package/dist/orchestrator/resume-handler.d.ts +34 -0
- package/dist/orchestrator/resume-handler.js +159 -0
- package/dist/orchestrator/stream-batcher.d.ts +16 -0
- package/dist/orchestrator/stream-batcher.js +50 -0
- package/dist/orchestrator/stream-json-extractor.d.ts +97 -0
- package/dist/orchestrator/stream-json-extractor.js +579 -0
- package/dist/vm/claude-token-manager.d.ts +36 -0
- package/dist/vm/claude-token-manager.js +223 -0
- package/dist/vm/docker-executor.d.ts +131 -0
- package/dist/vm/docker-executor.js +360 -0
- package/dist/vm/docker-process-proxy.d.ts +31 -0
- package/dist/vm/docker-process-proxy.js +105 -0
- package/dist/vm/forge-vm-agent.d.ts +11 -0
- package/dist/vm/forge-vm-agent.js +159 -0
- package/dist/vm/git-credentials.d.ts +43 -0
- package/dist/vm/git-credentials.js +53 -0
- package/dist/vm/image-manager.d.ts +7 -0
- package/dist/vm/image-manager.js +61 -0
- package/dist/vm/log.d.ts +9 -0
- package/dist/vm/log.js +18 -0
- package/dist/vm/mcp-bridge.d.ts +63 -0
- package/dist/vm/mcp-bridge.js +243 -0
- package/dist/vm/mcp-stub.d.ts +15 -0
- package/dist/vm/mcp-stub.js +67 -0
- package/dist/vm/native-addon.d.ts +69 -0
- package/dist/vm/native-addon.js +68 -0
- package/dist/vm/provider-resolver.d.ts +7 -0
- package/dist/vm/provider-resolver.js +27 -0
- package/dist/vm/providers/lima.d.ts +17 -0
- package/dist/vm/providers/lima.js +191 -0
- package/dist/vm/providers/qemu.d.ts +28 -0
- package/dist/vm/providers/qemu.js +260 -0
- package/dist/vm/providers/vfkit.d.ts +40 -0
- package/dist/vm/providers/vfkit.js +371 -0
- package/dist/vm/providers/wsl2.d.ts +27 -0
- package/dist/vm/providers/wsl2.js +226 -0
- package/dist/vm/session-manager.d.ts +130 -0
- package/dist/vm/session-manager.js +494 -0
- package/dist/vm/session-snapshot.d.ts +31 -0
- package/dist/vm/session-snapshot.js +180 -0
- package/dist/vm/types.d.ts +73 -0
- package/dist/vm/types.js +2 -0
- package/dist/vm/vm-helper-client.d.ts +81 -0
- package/dist/vm/vm-helper-client.js +335 -0
- package/dist/vm/vm-helper.d.ts +11 -0
- package/dist/vm/vm-helper.js +156 -0
- package/dist/vm/vm-ipc-protocol.d.ts +84 -0
- package/dist/vm/vm-ipc-protocol.js +9 -0
- package/dist/vm/vm-manager-facade.d.ts +23 -0
- package/dist/vm/vm-manager-facade.js +43 -0
- package/dist/vm/vm-manager.d.ts +74 -0
- package/dist/vm/vm-manager.js +515 -0
- package/dist/vm/vm-process-proxy.d.ts +34 -0
- package/dist/vm/vm-process-proxy.js +64 -0
- package/dist/vm/vsock-bridge.d.ts +44 -0
- package/dist/vm/vsock-bridge.js +140 -0
- package/dist/vm/vsock-protocol.d.ts +98 -0
- package/dist/vm/vsock-protocol.js +57 -0
- package/package.json +65 -0
- package/rootfs/Dockerfile +50 -0
- package/rootfs/forge-mcp-relay.mjs +158 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamBatcher — accumulates stdout/stderr chunks and flushes on newline
|
|
3
|
+
* OR after a configurable time window (whichever comes first).
|
|
4
|
+
* Best-effort: flush errors are caught and logged, buffer is always cleared.
|
|
5
|
+
*/
|
|
6
|
+
export declare class StreamBatcher {
|
|
7
|
+
private readonly onFlush;
|
|
8
|
+
private readonly flushIntervalMs;
|
|
9
|
+
private buffer;
|
|
10
|
+
private timer;
|
|
11
|
+
constructor(onFlush: (chunk: string) => void, flushIntervalMs?: number);
|
|
12
|
+
write(data: string): void;
|
|
13
|
+
flush(): void;
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=stream-batcher.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/**
|
|
3
|
+
* StreamBatcher — accumulates stdout/stderr chunks and flushes on newline
|
|
4
|
+
* OR after a configurable time window (whichever comes first).
|
|
5
|
+
* Best-effort: flush errors are caught and logged, buffer is always cleared.
|
|
6
|
+
*/
|
|
7
|
+
export class StreamBatcher {
|
|
8
|
+
onFlush;
|
|
9
|
+
flushIntervalMs;
|
|
10
|
+
buffer = "";
|
|
11
|
+
timer = null;
|
|
12
|
+
constructor(onFlush, flushIntervalMs = 200) {
|
|
13
|
+
this.onFlush = onFlush;
|
|
14
|
+
this.flushIntervalMs = flushIntervalMs;
|
|
15
|
+
}
|
|
16
|
+
write(data) {
|
|
17
|
+
this.buffer += data;
|
|
18
|
+
if (this.buffer.includes("\n")) {
|
|
19
|
+
this.flush();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.timer ??= setTimeout(() => this.flush(), this.flushIntervalMs);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
flush() {
|
|
26
|
+
if (!this.buffer)
|
|
27
|
+
return;
|
|
28
|
+
if (this.timer) {
|
|
29
|
+
clearTimeout(this.timer);
|
|
30
|
+
this.timer = null;
|
|
31
|
+
}
|
|
32
|
+
const chunk = this.buffer;
|
|
33
|
+
this.buffer = "";
|
|
34
|
+
try {
|
|
35
|
+
this.onFlush(chunk);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Best-effort: log warning but always clear buffer to prevent unbounded growth
|
|
39
|
+
console.warn(chalk.yellow("[stream-batcher] onFlush error, chunk dropped"));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
destroy() {
|
|
43
|
+
this.flush();
|
|
44
|
+
if (this.timer) {
|
|
45
|
+
clearTimeout(this.timer);
|
|
46
|
+
this.timer = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=stream-batcher.js.map
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type QuestionOption = {
|
|
2
|
+
label: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
};
|
|
5
|
+
export type QuestionData = {
|
|
6
|
+
question: string;
|
|
7
|
+
header?: string;
|
|
8
|
+
options?: QuestionOption[];
|
|
9
|
+
multiSelect?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type ToolActivityData = {
|
|
12
|
+
toolName: string;
|
|
13
|
+
toolDetail: string;
|
|
14
|
+
/** For Agent tool_use blocks: the block's own id */
|
|
15
|
+
toolUseId?: string;
|
|
16
|
+
/** For sub-agent tools: the parent Agent tool_use id */
|
|
17
|
+
parentToolUseId?: string;
|
|
18
|
+
};
|
|
19
|
+
export type TokenUsageData = {
|
|
20
|
+
inputTokens: number;
|
|
21
|
+
outputTokens: number;
|
|
22
|
+
};
|
|
23
|
+
export declare class StreamJsonExtractor {
|
|
24
|
+
private readonly onText;
|
|
25
|
+
private lineBuf;
|
|
26
|
+
/** Track which tool_use IDs we've already emitted (questions + activity). */
|
|
27
|
+
private readonly emittedToolUseIds;
|
|
28
|
+
/** Track which system event UUIDs we've already processed (sub-agent progress). */
|
|
29
|
+
private readonly emittedSystemUuids;
|
|
30
|
+
/** Incremented on each message_start — groups text from the same API turn. */
|
|
31
|
+
turnIndex: number;
|
|
32
|
+
private readonly onQuestion?;
|
|
33
|
+
private readonly onToolActivity?;
|
|
34
|
+
private readonly onTokenUsage?;
|
|
35
|
+
private inputTokens;
|
|
36
|
+
private outputTokens;
|
|
37
|
+
/** Error text from the last `type: "result"` event with `is_error: true`. */
|
|
38
|
+
lastError: string | null;
|
|
39
|
+
/** Session ID for log context (optional). */
|
|
40
|
+
private readonly sessionId?;
|
|
41
|
+
constructor(onText: (delta: string) => void, onQuestion?: (questions: QuestionData[]) => void, onToolActivity?: (activity: ToolActivityData) => void, onTokenUsage?: (usage: TokenUsageData) => void, sessionId?: string);
|
|
42
|
+
write(data: string): void;
|
|
43
|
+
/** Flush any remaining partial line on process exit. */
|
|
44
|
+
flush(): void;
|
|
45
|
+
private parseLine;
|
|
46
|
+
private handleMessageStart;
|
|
47
|
+
private calculateInputTokens;
|
|
48
|
+
private handleContentBlockStart;
|
|
49
|
+
private handleMessageDelta;
|
|
50
|
+
private handleStreamEvent;
|
|
51
|
+
/**
|
|
52
|
+
* Handle `type: "result"` event — contains final usage stats.
|
|
53
|
+
* Used as fallback if message_start/message_delta didn't provide usage.
|
|
54
|
+
*/
|
|
55
|
+
private handleResult;
|
|
56
|
+
private handleAskUserQuestion;
|
|
57
|
+
private handleToolActivity;
|
|
58
|
+
private isValidToolUseBlock;
|
|
59
|
+
/**
|
|
60
|
+
* Handle `type: "assistant"` snapshot messages.
|
|
61
|
+
* These contain cumulative content blocks after streaming completes for each block.
|
|
62
|
+
* We extract AskUserQuestion tool_use blocks and format questions as readable text.
|
|
63
|
+
*/
|
|
64
|
+
private handleAssistantSnapshot;
|
|
65
|
+
/**
|
|
66
|
+
* Handle `type: "system"` events — sub-agent progress updates.
|
|
67
|
+
* System events with `last_tool_name` + `tool_use_id` represent tools used by sub-agents.
|
|
68
|
+
* `tool_use_id` references the parent Agent tool_use block id.
|
|
69
|
+
*/
|
|
70
|
+
private handleSystemEvent;
|
|
71
|
+
private extractStructuredQuestions;
|
|
72
|
+
private formatOptionLine;
|
|
73
|
+
private formatQuestionOptions;
|
|
74
|
+
private formatQuestions;
|
|
75
|
+
private static readonly BILLING_PATTERNS;
|
|
76
|
+
/**
|
|
77
|
+
* Check if the captured error (from result event or accumulated stderr)
|
|
78
|
+
* indicates a billing/token exhaustion issue.
|
|
79
|
+
* Optionally accepts extra text (e.g. stderr buffer) to scan.
|
|
80
|
+
*/
|
|
81
|
+
isBillingError(extraText?: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Extract the usage-limit reset timestamp from error text.
|
|
84
|
+
* Handles multiple formats:
|
|
85
|
+
* - "reset at 2026-03-08T15:00:00+00:00" (ISO datetime)
|
|
86
|
+
* - "resets 7pm (Europe/Paris)" (time + timezone)
|
|
87
|
+
* - "resets in 2 hours" (relative duration)
|
|
88
|
+
* Returns an ISO string if a valid future timestamp is found, otherwise null.
|
|
89
|
+
*/
|
|
90
|
+
extractResetTimestamp(extraText?: string): string | null;
|
|
91
|
+
/**
|
|
92
|
+
* Resolve a time-of-day (e.g. "7pm") in a named timezone to an ISO string.
|
|
93
|
+
* Uses Intl.DateTimeFormat to avoid external dependencies.
|
|
94
|
+
*/
|
|
95
|
+
private static resolveTimeInTimezone;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=stream-json-extractor.d.ts.map
|