openwork 0.1.1-rc.1 → 0.1.1-rc.3
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/out/main/index.js
CHANGED
|
@@ -819,14 +819,14 @@ When delegating to subagents:
|
|
|
819
819
|
## Tools
|
|
820
820
|
|
|
821
821
|
### File Tools
|
|
822
|
-
- read_file: Read file contents
|
|
822
|
+
- read_file: Read file contents
|
|
823
823
|
- edit_file: Replace exact strings in files (must read first, provide unique old_string)
|
|
824
824
|
- write_file: Create or overwrite files
|
|
825
|
-
- ls: List directory contents
|
|
825
|
+
- ls: List directory contents (use "/" for workspace root)
|
|
826
826
|
- glob: Find files by pattern (e.g., "**/*.py")
|
|
827
827
|
- grep: Search file contents
|
|
828
828
|
|
|
829
|
-
All file paths
|
|
829
|
+
All file paths are virtual paths relative to the workspace root, starting with /.
|
|
830
830
|
|
|
831
831
|
## Code References
|
|
832
832
|
When referencing code, use format: \`file_path:line_number\`
|
|
@@ -862,18 +862,15 @@ When using the write_todos tool:
|
|
|
862
862
|
The todo list is a planning tool - use it judiciously to avoid overwhelming the user with excessive task tracking.
|
|
863
863
|
`;
|
|
864
864
|
function getSystemPrompt(workspacePath) {
|
|
865
|
-
const workingDirSection =
|
|
866
|
-
|
|
867
|
-
The filesystem backend is currently operating in: \`${workspacePath}\`
|
|
868
|
-
|
|
865
|
+
const workingDirSection = `
|
|
869
866
|
### File System and Paths
|
|
870
867
|
|
|
871
868
|
**IMPORTANT - Path Handling:**
|
|
872
|
-
- All file paths
|
|
873
|
-
-
|
|
874
|
-
- Example:
|
|
875
|
-
-
|
|
876
|
-
|
|
869
|
+
- All file paths use virtual paths starting with \`/\` (the workspace root)
|
|
870
|
+
- \`/\` refers to the workspace root directory
|
|
871
|
+
- Example: \`/src/index.ts\`, \`/README.md\`, \`/package.json\`
|
|
872
|
+
- To list the workspace root, use \`ls("/")\`
|
|
873
|
+
- Never use fully qualified system paths like \`${workspacePath}/...\`
|
|
877
874
|
`;
|
|
878
875
|
return workingDirSection + BASE_SYSTEM_PROMPT;
|
|
879
876
|
}
|
|
@@ -917,7 +914,9 @@ function getModelInstance(modelId) {
|
|
|
917
914
|
async function createAgentRuntime(options) {
|
|
918
915
|
const { modelId, workspacePath } = options;
|
|
919
916
|
if (!workspacePath) {
|
|
920
|
-
throw new Error(
|
|
917
|
+
throw new Error(
|
|
918
|
+
"Workspace path is required. Please select a workspace folder before running the agent."
|
|
919
|
+
);
|
|
921
920
|
}
|
|
922
921
|
console.log("[Runtime] Creating agent runtime...");
|
|
923
922
|
console.log("[Runtime] Workspace path:", workspacePath);
|
|
@@ -928,7 +927,6 @@ async function createAgentRuntime(options) {
|
|
|
928
927
|
const backend = new deepagents.FilesystemBackend({
|
|
929
928
|
rootDir: workspacePath,
|
|
930
929
|
virtualMode: true
|
|
931
|
-
// Use virtual paths starting with /
|
|
932
930
|
});
|
|
933
931
|
const systemPrompt = getSystemPrompt(workspacePath);
|
|
934
932
|
const agent = deepagents.createDeepAgent({
|
|
@@ -34262,7 +34262,13 @@ var BaseMessage = class extends Serializable {
|
|
|
34262
34262
|
function isOpenAIToolCallArray(value) {
|
|
34263
34263
|
return Array.isArray(value) && value.every((v2) => typeof v2.index === "number");
|
|
34264
34264
|
}
|
|
34265
|
-
|
|
34265
|
+
const DEFAULT_MERGE_IGNORE_KEYS = [
|
|
34266
|
+
"index",
|
|
34267
|
+
"created",
|
|
34268
|
+
"timestamp"
|
|
34269
|
+
];
|
|
34270
|
+
function _mergeDicts(left, right, options) {
|
|
34271
|
+
const ignoreKeys = options?.ignoreKeys ?? DEFAULT_MERGE_IGNORE_KEYS;
|
|
34266
34272
|
if (left === void 0 && right === void 0) return void 0;
|
|
34267
34273
|
if (left === void 0 || right === void 0) return left ?? right;
|
|
34268
34274
|
const merged = { ...left };
|
|
@@ -34277,15 +34283,18 @@ function _mergeDicts(left, right) {
|
|
|
34277
34283
|
"model_provider"
|
|
34278
34284
|
].includes(key2)) {
|
|
34279
34285
|
if (value) merged[key2] = value;
|
|
34280
|
-
} else
|
|
34281
|
-
else
|
|
34282
|
-
else if (typeof merged[key2] === "
|
|
34283
|
-
|
|
34286
|
+
} else if (ignoreKeys.includes(key2)) continue;
|
|
34287
|
+
else merged[key2] += value;
|
|
34288
|
+
else if (typeof merged[key2] === "number") {
|
|
34289
|
+
if (ignoreKeys.includes(key2)) continue;
|
|
34290
|
+
merged[key2] = merged[key2] + value;
|
|
34291
|
+
} else if (typeof merged[key2] === "object" && !Array.isArray(merged[key2])) merged[key2] = _mergeDicts(merged[key2], value, options);
|
|
34292
|
+
else if (Array.isArray(merged[key2])) merged[key2] = _mergeLists(merged[key2], value, options);
|
|
34284
34293
|
else if (merged[key2] === value) continue;
|
|
34285
34294
|
else console.warn(`field[${key2}] already exists in this message chunk and value has unsupported type.`);
|
|
34286
34295
|
return merged;
|
|
34287
34296
|
}
|
|
34288
|
-
function _mergeLists(left, right) {
|
|
34297
|
+
function _mergeLists(left, right, options) {
|
|
34289
34298
|
if (left === void 0 && right === void 0) return void 0;
|
|
34290
34299
|
else if (left === void 0 || right === void 0) return left || right;
|
|
34291
34300
|
else {
|
|
@@ -34298,22 +34307,22 @@ function _mergeLists(left, right) {
|
|
|
34298
34307
|
const eitherItemMissingID = !("id" in leftItem) || !leftItem?.id || !("id" in item) || !item?.id;
|
|
34299
34308
|
return isObject && indiciesMatch && (idsMatch || eitherItemMissingID);
|
|
34300
34309
|
});
|
|
34301
|
-
if (toMerge !== -1 && typeof merged[toMerge] === "object" && merged[toMerge] !== null) merged[toMerge] = _mergeDicts(merged[toMerge], item);
|
|
34310
|
+
if (toMerge !== -1 && typeof merged[toMerge] === "object" && merged[toMerge] !== null) merged[toMerge] = _mergeDicts(merged[toMerge], item, options);
|
|
34302
34311
|
else merged.push(item);
|
|
34303
34312
|
} else if (typeof item === "object" && item !== null && "text" in item && item.text === "") continue;
|
|
34304
34313
|
else merged.push(item);
|
|
34305
34314
|
return merged;
|
|
34306
34315
|
}
|
|
34307
34316
|
}
|
|
34308
|
-
function _mergeObj(left, right) {
|
|
34317
|
+
function _mergeObj(left, right, options) {
|
|
34309
34318
|
if (left === void 0 && right === void 0) return void 0;
|
|
34310
34319
|
if (left === void 0 || right === void 0) return left ?? right;
|
|
34311
34320
|
else if (typeof left !== typeof right) throw new Error(`Cannot merge objects of different types.
|
|
34312
34321
|
Left ${typeof left}
|
|
34313
34322
|
Right ${typeof right}`);
|
|
34314
34323
|
else if (typeof left === "string" && typeof right === "string") return left + right;
|
|
34315
|
-
else if (Array.isArray(left) && Array.isArray(right)) return _mergeLists(left, right);
|
|
34316
|
-
else if (typeof left === "object" && typeof right === "object") return _mergeDicts(left, right);
|
|
34324
|
+
else if (Array.isArray(left) && Array.isArray(right)) return _mergeLists(left, right, options);
|
|
34325
|
+
else if (typeof left === "object" && typeof right === "object") return _mergeDicts(left, right, options);
|
|
34317
34326
|
else if (left === right) return left;
|
|
34318
34327
|
else throw new Error(`Can not merge objects of different types.
|
|
34319
34328
|
Left ${left}
|
|
@@ -47969,12 +47978,14 @@ const STATUS_NO_RETRY$1 = [
|
|
|
47969
47978
|
409
|
|
47970
47979
|
];
|
|
47971
47980
|
const defaultFailedAttemptHandler = (error) => {
|
|
47972
|
-
if (error
|
|
47973
|
-
if (error
|
|
47974
|
-
|
|
47981
|
+
if (typeof error !== "object" || error === null) return;
|
|
47982
|
+
if ("message" in error && typeof error.message === "string" && (error.message.startsWith("Cancel") || error.message.startsWith("AbortError")) || "name" in error && typeof error.name === "string" && error.name === "AbortError") throw error;
|
|
47983
|
+
if ("code" in error && typeof error.code === "string" && error.code === "ECONNABORTED") throw error;
|
|
47984
|
+
const status = "response" in error && typeof error.response === "object" && error.response !== null && "status" in error.response && typeof error.response.status === "number" ? error.response.status : void 0;
|
|
47975
47985
|
if (status && STATUS_NO_RETRY$1.includes(+status)) throw error;
|
|
47976
|
-
|
|
47977
|
-
|
|
47986
|
+
const code2 = "error" in error && typeof error.error === "object" && error.error !== null && "code" in error.error && typeof error.error.code === "string" ? error.error.code : void 0;
|
|
47987
|
+
if (code2 === "insufficient_quota") {
|
|
47988
|
+
const err = new Error("message" in error && typeof error.message === "string" ? error.message : "Insufficient quota");
|
|
47978
47989
|
err.name = "InsufficientQuotaError";
|
|
47979
47990
|
throw err;
|
|
47980
47991
|
}
|
|
@@ -57172,6 +57183,7 @@ __export(messages_exports, {
|
|
|
57172
57183
|
BaseMessageChunk: () => BaseMessageChunk,
|
|
57173
57184
|
ChatMessage: () => ChatMessage,
|
|
57174
57185
|
ChatMessageChunk: () => ChatMessageChunk,
|
|
57186
|
+
DEFAULT_MERGE_IGNORE_KEYS: () => DEFAULT_MERGE_IGNORE_KEYS,
|
|
57175
57187
|
FunctionMessage: () => FunctionMessage,
|
|
57176
57188
|
FunctionMessageChunk: () => FunctionMessageChunk,
|
|
57177
57189
|
HumanMessage: () => HumanMessage,
|
|
@@ -75120,7 +75132,7 @@ function TaskItem({ todo }) {
|
|
|
75120
75132
|
function FilesContent() {
|
|
75121
75133
|
const { workspaceFiles, workspacePath, currentThreadId, setWorkspacePath, setWorkspaceFiles } = useAppStore();
|
|
75122
75134
|
const [syncing, setSyncing] = reactExports.useState(false);
|
|
75123
|
-
const [syncSuccess
|
|
75135
|
+
const [syncSuccess] = reactExports.useState(false);
|
|
75124
75136
|
reactExports.useEffect(() => {
|
|
75125
75137
|
async function loadWorkspace() {
|
|
75126
75138
|
if (currentThreadId) {
|
|
@@ -75136,6 +75148,19 @@ function FilesContent() {
|
|
|
75136
75148
|
}
|
|
75137
75149
|
loadWorkspace();
|
|
75138
75150
|
}, [currentThreadId, setWorkspacePath, setWorkspaceFiles]);
|
|
75151
|
+
reactExports.useEffect(() => {
|
|
75152
|
+
if (!currentThreadId) return;
|
|
75153
|
+
const cleanup = window.api.workspace.onFilesChanged(async (data) => {
|
|
75154
|
+
if (data.threadId === currentThreadId) {
|
|
75155
|
+
console.log("[FilesContent] Files changed, reloading...", data);
|
|
75156
|
+
const result = await window.api.workspace.loadFromDisk(currentThreadId);
|
|
75157
|
+
if (result.success && result.files) {
|
|
75158
|
+
setWorkspaceFiles(result.files);
|
|
75159
|
+
}
|
|
75160
|
+
}
|
|
75161
|
+
});
|
|
75162
|
+
return cleanup;
|
|
75163
|
+
}, [currentThreadId, setWorkspaceFiles]);
|
|
75139
75164
|
async function handleSelectFolder() {
|
|
75140
75165
|
if (!currentThreadId) return;
|
|
75141
75166
|
setSyncing(true);
|
|
@@ -75535,7 +75560,7 @@ function App() {
|
|
|
75535
75560
|
},
|
|
75536
75561
|
children: [
|
|
75537
75562
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "app-badge-name", children: "OPENWORK" }),
|
|
75538
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "app-badge-version", children: "0.1.1-rc.
|
|
75563
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "app-badge-version", children: "0.1.1-rc.3" })
|
|
75539
75564
|
]
|
|
75540
75565
|
}
|
|
75541
75566
|
),
|
package/out/renderer/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
http-equiv="Content-Security-Policy"
|
|
8
8
|
content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"
|
|
9
9
|
/>
|
|
10
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-Dvk2R-ko.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="./assets/index-D2W2biEe.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openwork",
|
|
3
|
-
"version": "0.1.1-rc.
|
|
3
|
+
"version": "0.1.1-rc.3",
|
|
4
4
|
"description": "A tactical agent interface for deepagentsjs",
|
|
5
5
|
"main": "./out/main/index.js",
|
|
6
6
|
"files": [
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"electron": "^39.2.6",
|
|
50
|
-
"@langchain/anthropic": "^1.3.
|
|
51
|
-
"@langchain/core": "
|
|
50
|
+
"@langchain/anthropic": "^1.3.10",
|
|
51
|
+
"@langchain/core": "1.1.15",
|
|
52
52
|
"@langchain/langgraph": "^1.0.15",
|
|
53
53
|
"@langchain/langgraph-checkpoint": "^1.0.0",
|
|
54
54
|
"@langchain/langgraph-sdk": "^1.5.3",
|
|
55
|
-
"@langchain/openai": "^1.2.
|
|
55
|
+
"@langchain/openai": "^1.2.2",
|
|
56
56
|
"@radix-ui/react-context-menu": "^2.2.16",
|
|
57
57
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
58
58
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|