@opencomputer/blue 0.0.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 (41) hide show
  1. package/README.md +287 -0
  2. package/dist/auth/cli-auth.d.ts +30 -0
  3. package/dist/auth/cli-auth.js +206 -0
  4. package/dist/auth/cli-auth.js.map +1 -0
  5. package/dist/channels/slack-progress.d.ts +27 -0
  6. package/dist/channels/slack-progress.js +149 -0
  7. package/dist/channels/slack-progress.js.map +1 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/index.js +790 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/core/agent.d.ts +10 -0
  12. package/dist/core/agent.js +112 -0
  13. package/dist/core/agent.js.map +1 -0
  14. package/dist/core/artifact.d.ts +7 -0
  15. package/dist/core/artifact.js +46 -0
  16. package/dist/core/artifact.js.map +1 -0
  17. package/dist/dev/local-control-plane.d.ts +11 -0
  18. package/dist/dev/local-control-plane.js +639 -0
  19. package/dist/dev/local-control-plane.js.map +1 -0
  20. package/dist/dev/manager.d.ts +35 -0
  21. package/dist/dev/manager.js +589 -0
  22. package/dist/dev/manager.js.map +1 -0
  23. package/dist/openrouter/auth.d.ts +2 -0
  24. package/dist/openrouter/auth.js +144 -0
  25. package/dist/openrouter/auth.js.map +1 -0
  26. package/dist/protocol.d.ts +187 -0
  27. package/dist/protocol.js +14 -0
  28. package/dist/protocol.js.map +1 -0
  29. package/dist/runtime/harness.d.ts +30 -0
  30. package/dist/runtime/harness.js +370 -0
  31. package/dist/runtime/harness.js.map +1 -0
  32. package/dist/runtime/local-runtime.d.ts +2 -0
  33. package/dist/runtime/local-runtime.js +161 -0
  34. package/dist/runtime/local-runtime.js.map +1 -0
  35. package/dist/sdk/client.d.ts +28 -0
  36. package/dist/sdk/client.js +131 -0
  37. package/dist/sdk/client.js.map +1 -0
  38. package/dist/sdk/index.d.ts +2 -0
  39. package/dist/sdk/index.js +3 -0
  40. package/dist/sdk/index.js.map +1 -0
  41. package/package.json +95 -0
@@ -0,0 +1,149 @@
1
+ const STATUS_MAX_LENGTH = 50;
2
+ const REASONING_REFRESH_INTERVAL_MS = 5_000;
3
+ const REASONING_MIN_PROGRESS_CHARS = 4;
4
+ const SALIENT_KEYS = {
5
+ bash: ["command"],
6
+ glob: ["pattern"],
7
+ grep: ["pattern", "path"],
8
+ read: ["filePath", "path"],
9
+ read_file: ["filePath"],
10
+ webfetch: ["url"],
11
+ websearch: ["query"],
12
+ write: ["filePath", "path"],
13
+ write_file: ["filePath"],
14
+ };
15
+ const GENERIC_KEYS = [
16
+ "filePath",
17
+ "path",
18
+ "pattern",
19
+ "command",
20
+ "query",
21
+ "name",
22
+ "url",
23
+ ];
24
+ function truncate(value, limit) {
25
+ if (value.length <= limit)
26
+ return value;
27
+ return `${value.slice(0, Math.max(0, limit - 3)).trimEnd()}...`;
28
+ }
29
+ export function truncateSlackStatus(value) {
30
+ const normalized = value
31
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
32
+ .replace(/`([^`]+)`/g, "$1")
33
+ .replace(/\*\*([^*]+)\*\*/g, "$1")
34
+ .replace(/\s+/g, " ")
35
+ .trim();
36
+ return truncate(normalized, STATUS_MAX_LENGTH);
37
+ }
38
+ function compactArgument(value) {
39
+ const firstLine = value.split(/\r?\n/, 1)[0]?.trim() ?? "";
40
+ if (firstLine.length <= 40)
41
+ return firstLine;
42
+ if (firstLine.includes("/") && !firstLine.includes(" ")) {
43
+ const tail = firstLine.split("/").filter(Boolean).slice(-2).join("/");
44
+ if (tail.length <= 40)
45
+ return tail;
46
+ }
47
+ return truncate(firstLine, 40);
48
+ }
49
+ export function describeSlackTool(event) {
50
+ const tool = typeof event.data.tool === "string" ? event.data.tool : "tool";
51
+ const input = event.data.input &&
52
+ typeof event.data.input === "object" &&
53
+ !Array.isArray(event.data.input)
54
+ ? event.data.input
55
+ : {};
56
+ for (const key of SALIENT_KEYS[tool] ?? GENERIC_KEYS) {
57
+ const value = input[key];
58
+ if (typeof value === "string" && value.trim()) {
59
+ return truncateSlackStatus(`${tool} ${compactArgument(value)}`);
60
+ }
61
+ if (typeof value === "number") {
62
+ return truncateSlackStatus(`${tool} ${String(value)}`);
63
+ }
64
+ }
65
+ const title = typeof event.data.title === "string" ? event.data.title.trim() : "";
66
+ return truncateSlackStatus(title || tool);
67
+ }
68
+ export class SlackProgress {
69
+ update;
70
+ chain = Promise.resolve();
71
+ lastReasoningAt = 0;
72
+ lastReasoningStatus = "";
73
+ reasoning = "";
74
+ stopped = false;
75
+ writing = false;
76
+ constructor(update) {
77
+ this.update = update;
78
+ }
79
+ start() {
80
+ this.enqueue({
81
+ status: "Thinking...",
82
+ loadingMessages: [
83
+ "Reading your request...",
84
+ "Inspecting the workspace...",
85
+ "Planning the next step...",
86
+ ],
87
+ }, true);
88
+ }
89
+ runtimeStarting() {
90
+ this.enqueue({ status: "Starting OpenCode..." }, true);
91
+ }
92
+ runtimeReady() {
93
+ this.enqueue({ status: "Working..." }, true);
94
+ }
95
+ handle(event) {
96
+ if (event.type === "reasoning.delta") {
97
+ this.reasoning += String(event.data.text ?? "");
98
+ const line = this.reasoning
99
+ .split(/\r?\n/)
100
+ .map((candidate) => candidate.trim())
101
+ .find(Boolean);
102
+ if (!line)
103
+ return;
104
+ const status = truncateSlackStatus(line);
105
+ const now = Date.now();
106
+ const progressive = this.lastReasoningStatus.length > 0 &&
107
+ status.startsWith(this.lastReasoningStatus) &&
108
+ status.length >=
109
+ this.lastReasoningStatus.length + REASONING_MIN_PROGRESS_CHARS;
110
+ if (!progressive &&
111
+ now - this.lastReasoningAt < REASONING_REFRESH_INTERVAL_MS) {
112
+ return;
113
+ }
114
+ this.lastReasoningAt = now;
115
+ this.lastReasoningStatus = status;
116
+ this.enqueue({ status });
117
+ return;
118
+ }
119
+ if (event.type === "tool.started") {
120
+ this.enqueue({ status: describeSlackTool(event) }, true);
121
+ return;
122
+ }
123
+ if (event.type === "tool.failed") {
124
+ this.enqueue({ status: "Recovering from a tool error..." }, true);
125
+ return;
126
+ }
127
+ if (event.type === "message.delta" && !this.writing) {
128
+ this.writing = true;
129
+ this.enqueue({ status: "Writing response..." }, true);
130
+ }
131
+ }
132
+ async stop(options = {}) {
133
+ this.stopped = true;
134
+ await this.chain;
135
+ if (options.clear) {
136
+ await this.update({ status: "" });
137
+ }
138
+ }
139
+ enqueue(status, force = false) {
140
+ if (this.stopped)
141
+ return;
142
+ if (!force && !status.status)
143
+ return;
144
+ this.chain = this.chain
145
+ .catch(() => undefined)
146
+ .then(() => this.update(status));
147
+ }
148
+ }
149
+ //# sourceMappingURL=slack-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-progress.js","sourceRoot":"","sources":["../../src/channels/slack-progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};