iosm-cli 0.2.5 → 0.2.7
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/CHANGELOG.md +55 -0
- package/README.md +460 -304
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-profiles.d.ts.map +1 -1
- package/dist/core/agent-profiles.js +4 -2
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +14 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/shadow-guard.js +1 -1
- package/dist/core/shadow-guard.js.map +1 -1
- package/dist/core/shared-memory.d.ts +14 -0
- package/dist/core/shared-memory.d.ts.map +1 -1
- package/dist/core/shared-memory.js +63 -0
- package/dist/core/shared-memory.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +17 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/fetch.d.ts +56 -0
- package/dist/core/tools/fetch.d.ts.map +1 -0
- package/dist/core/tools/fetch.js +272 -0
- package/dist/core/tools/fetch.js.map +1 -0
- package/dist/core/tools/fs-ops.d.ts +54 -0
- package/dist/core/tools/fs-ops.d.ts.map +1 -0
- package/dist/core/tools/fs-ops.js +206 -0
- package/dist/core/tools/fs-ops.js.map +1 -0
- package/dist/core/tools/git-read.d.ts +60 -0
- package/dist/core/tools/git-read.d.ts.map +1 -0
- package/dist/core/tools/git-read.js +267 -0
- package/dist/core/tools/git-read.js.map +1 -0
- package/dist/core/tools/index.d.ts +44 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +22 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/shared-memory.d.ts.map +1 -1
- package/dist/core/tools/shared-memory.js +45 -5
- package/dist/core/tools/shared-memory.js.map +1 -1
- package/dist/core/tools/task.d.ts +12 -1
- package/dist/core/tools/task.d.ts.map +1 -1
- package/dist/core/tools/task.js +565 -9
- package/dist/core/tools/task.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +185 -26
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/cli-reference.md +4 -1
- package/docs/configuration.md +2 -2
- package/docs/interactive-mode.md +2 -2
- package/docs/rpc-json-sdk.md +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAEN,KAAK,mBAAmB,EAIxB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAEN,KAAK,mBAAmB,EAIxB,MAAM,qBAAqB,CAAC;AAa7B,QAAA,MAAM,uBAAuB;;;;;;EAwB3B,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;EA8B1B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA2E1E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,uBAAuB,CAAC,CAuCnH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,sBAAsB,CAAC,CA2DjH"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { readSharedMemory, writeSharedMemory, } from "../shared-memory.js";
|
|
3
|
+
function resolveSharedMemoryScopePolicy(raw) {
|
|
4
|
+
const normalized = (raw ?? "").trim().toLowerCase();
|
|
5
|
+
if (normalized === "warn")
|
|
6
|
+
return "warn";
|
|
7
|
+
if (normalized === "enforce")
|
|
8
|
+
return "enforce";
|
|
9
|
+
return "legacy";
|
|
10
|
+
}
|
|
11
|
+
const sharedMemoryScopePolicy = resolveSharedMemoryScopePolicy(process.env.IOSM_SHARED_MEMORY_SCOPE_POLICY);
|
|
3
12
|
const sharedMemoryWriteSchema = Type.Object({
|
|
4
13
|
key: Type.String({
|
|
5
14
|
minLength: 1,
|
|
@@ -75,8 +84,21 @@ function summarizeWriter(context) {
|
|
|
75
84
|
.join(" ");
|
|
76
85
|
return parts.length > 0 ? parts : "root";
|
|
77
86
|
}
|
|
78
|
-
function
|
|
79
|
-
|
|
87
|
+
function resolveScope(input) {
|
|
88
|
+
if (input.scope)
|
|
89
|
+
return { scope: input.scope };
|
|
90
|
+
if (sharedMemoryScopePolicy === "enforce") {
|
|
91
|
+
throw new Error(`shared_memory_${input.operation} requires explicit scope ("run" or "task"). ` +
|
|
92
|
+
`Set IOSM_SHARED_MEMORY_SCOPE_POLICY=legacy to restore implicit defaults.`);
|
|
93
|
+
}
|
|
94
|
+
const shouldWarn = sharedMemoryScopePolicy === "warn" || input.context.profile === "meta";
|
|
95
|
+
if (!shouldWarn) {
|
|
96
|
+
return { scope: "task" };
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
scope: "task",
|
|
100
|
+
warning: `scope omitted -> defaulted to "task" for shared_memory_${input.operation}. Pass explicit scope to avoid ambiguity.`,
|
|
101
|
+
};
|
|
80
102
|
}
|
|
81
103
|
function normalizeMode(mode) {
|
|
82
104
|
return mode ?? "set";
|
|
@@ -90,23 +112,31 @@ export function createSharedMemoryWriteTool(context) {
|
|
|
90
112
|
execute: async (_toolCallId, params, _signal) => {
|
|
91
113
|
const input = params;
|
|
92
114
|
const ensured = ensureContext(context);
|
|
115
|
+
const scopeResolution = resolveScope({
|
|
116
|
+
scope: input.scope,
|
|
117
|
+
context: ensured,
|
|
118
|
+
operation: "write",
|
|
119
|
+
});
|
|
93
120
|
const result = await writeSharedMemory(ensured, {
|
|
94
121
|
key: input.key,
|
|
95
122
|
value: input.value,
|
|
96
|
-
scope:
|
|
123
|
+
scope: scopeResolution.scope,
|
|
97
124
|
mode: normalizeMode(input.mode),
|
|
98
125
|
ifVersion: input.if_version,
|
|
99
126
|
}, _signal);
|
|
127
|
+
const warningLine = scopeResolution.warning ? `\nwarning: ${scopeResolution.warning}` : "";
|
|
100
128
|
return {
|
|
101
129
|
content: [
|
|
102
130
|
{
|
|
103
131
|
type: "text",
|
|
104
|
-
text: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})`,
|
|
132
|
+
text: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})${warningLine}`,
|
|
105
133
|
},
|
|
106
134
|
],
|
|
107
135
|
details: {
|
|
108
136
|
runId: ensured.runId,
|
|
109
137
|
item: summarizeSharedMemoryItemForDetails(result, false),
|
|
138
|
+
scopePolicy: sharedMemoryScopePolicy,
|
|
139
|
+
scopeWarning: scopeResolution.warning,
|
|
110
140
|
},
|
|
111
141
|
};
|
|
112
142
|
},
|
|
@@ -124,8 +154,13 @@ export function createSharedMemoryReadTool(context) {
|
|
|
124
154
|
throw new Error("shared_memory_read accepts either key or prefix, not both");
|
|
125
155
|
}
|
|
126
156
|
const ensured = ensureContext(context);
|
|
157
|
+
const scopeResolution = resolveScope({
|
|
158
|
+
scope: input.scope,
|
|
159
|
+
context: ensured,
|
|
160
|
+
operation: "read",
|
|
161
|
+
});
|
|
127
162
|
const result = await readSharedMemory(ensured, {
|
|
128
|
-
scope:
|
|
163
|
+
scope: scopeResolution.scope,
|
|
129
164
|
key: input.key,
|
|
130
165
|
prefix: input.prefix,
|
|
131
166
|
limit: input.limit,
|
|
@@ -147,6 +182,9 @@ export function createSharedMemoryReadTool(context) {
|
|
|
147
182
|
: ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;
|
|
148
183
|
return `- ${item.key} v${item.version}${writer ? ` (${writer})` : ""}${valuePart}`;
|
|
149
184
|
});
|
|
185
|
+
if (scopeResolution.warning) {
|
|
186
|
+
lines.unshift(`warning: ${scopeResolution.warning}`);
|
|
187
|
+
}
|
|
150
188
|
return {
|
|
151
189
|
content: [{ type: "text", text: [header, ...lines].join("\n") }],
|
|
152
190
|
details: {
|
|
@@ -154,6 +192,8 @@ export function createSharedMemoryReadTool(context) {
|
|
|
154
192
|
scope: result.scope,
|
|
155
193
|
totalMatched: result.totalMatched,
|
|
156
194
|
items: result.items.map((item) => summarizeSharedMemoryItemForDetails(item, input.include_values === true)),
|
|
195
|
+
scopePolicy: sharedMemoryScopePolicy,
|
|
196
|
+
scopeWarning: scopeResolution.warning,
|
|
157
197
|
},
|
|
158
198
|
};
|
|
159
199
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport {\n\treadSharedMemory,\n\ttype SharedMemoryContext,\n\ttype SharedMemoryScope,\n\ttype SharedMemoryWriteMode,\n\twriteSharedMemory,\n} from \"../shared-memory.js\";\n\nconst sharedMemoryWriteSchema = Type.Object({\n\tkey: Type.String({\n\t\tminLength: 1,\n\t\tdescription: \"Logical key for shared data within the current run (for example: findings/auth).\",\n\t}),\n\tvalue: Type.String({\n\t\tdescription: \"Text payload to store.\",\n\t}),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tmode: Type.Optional(\n\t\tType.Union([Type.Literal(\"set\"), Type.Literal(\"append\")], {\n\t\t\tdescription: \"set replaces value; append concatenates to existing value.\",\n\t\t}),\n\t),\n\tif_version: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tdescription: \"Optional CAS guard. Write succeeds only when current version matches this value.\",\n\t\t}),\n\t),\n});\n\nconst sharedMemoryReadSchema = Type.Object({\n\tkey: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Exact key to read. Mutually exclusive with prefix.\",\n\t\t}),\n\t),\n\tprefix: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Prefix filter for keys (for example: findings/).\",\n\t\t}),\n\t),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: 100,\n\t\t\tdescription: \"Maximum entries to return (default 20).\",\n\t\t}),\n\t),\n\tinclude_values: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"When false (default), returns only metadata (key/version/writer).\",\n\t\t}),\n\t),\n});\n\nexport type SharedMemoryWriteInput = Static<typeof sharedMemoryWriteSchema>;\nexport type SharedMemoryReadInput = Static<typeof sharedMemoryReadSchema>;\n\nfunction summarizeSharedMemoryItemForDetails(\n\titem: {\n\t\tkey: string;\n\t\tscope: SharedMemoryScope;\n\t\tversion: number;\n\t\tupdatedAt: string;\n\t\twriter: { taskId?: string; delegateId?: string; profile?: string };\n\t\tvalue?: string;\n\t},\n\tincludeValuePreview: boolean,\n): Record<string, unknown> {\n\tconst base: Record<string, unknown> = {\n\t\tkey: item.key,\n\t\tscope: item.scope,\n\t\tversion: item.version,\n\t\tupdatedAt: item.updatedAt,\n\t\twriter: item.writer,\n\t};\n\tif (typeof item.value !== \"string\") return base;\n\tconst valueLength = item.value.length;\n\tif (!includeValuePreview) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tvalueLength,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tvalueLength,\n\t\tvaluePreview: item.value.length > 200 ? `${item.value.slice(0, 197)}...` : item.value,\n\t};\n}\n\nfunction ensureContext(context: SharedMemoryContext): SharedMemoryContext {\n\tif (!context.runId || !context.runId.trim()) {\n\t\tthrow new Error(\"shared memory is unavailable: missing run_id context\");\n\t}\n\treturn context;\n}\n\nfunction summarizeWriter(context: SharedMemoryContext): string {\n\tconst parts = [context.taskId ? `task=${context.taskId}` : undefined, context.delegateId ? `delegate=${context.delegateId}` : undefined]\n\t\t.filter((item): item is string => Boolean(item))\n\t\t.join(\" \");\n\treturn parts.length > 0 ? parts : \"root\";\n}\n\nfunction normalizeScope(scope: SharedMemoryScope | undefined): SharedMemoryScope {\n\treturn scope ?? \"task\";\n}\n\nfunction normalizeMode(mode: SharedMemoryWriteMode | undefined): SharedMemoryWriteMode {\n\treturn mode ?? \"set\";\n}\n\nexport function createSharedMemoryWriteTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryWriteSchema> {\n\treturn {\n\t\tname: \"shared_memory_write\",\n\t\tlabel: \"shared_memory_write\",\n\t\tdescription:\n\t\t\t\"Write intermediate data into run-scoped shared memory so parallel agents/delegates can exchange state.\",\n\t\tparameters: sharedMemoryWriteSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryWriteInput;\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await writeSharedMemory(ensured, {\n\t\t\t\tkey: input.key,\n\t\t\t\tvalue: input.value,\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tmode: normalizeMode(input.mode),\n\t\t\t\tifVersion: input.if_version,\n\t\t\t}, _signal);\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: ensured.runId,\n\t\t\t\t\titem: summarizeSharedMemoryItemForDetails(result, false),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSharedMemoryReadTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryReadSchema> {\n\treturn {\n\t\tname: \"shared_memory_read\",\n\t\tlabel: \"shared_memory_read\",\n\t\tdescription:\n\t\t\t\"Read intermediate data from run-scoped shared memory (task-local or run-global view).\",\n\t\tparameters: sharedMemoryReadSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryReadInput;\n\t\t\tif (input.key && input.prefix) {\n\t\t\t\tthrow new Error(\"shared_memory_read accepts either key or prefix, not both\");\n\t\t\t}\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await readSharedMemory(ensured, {\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tkey: input.key,\n\t\t\t\tprefix: input.prefix,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tincludeValues: input.include_values ?? false,\n\t\t\t}, _signal);\n\t\t\tconst header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;\n\t\t\tconst lines =\n\t\t\t\tresult.items.length === 0\n\t\t\t\t\t? [\"(no entries)\"]\n\t\t\t\t\t: result.items.map((item) => {\n\t\t\t\t\t\t\tconst writer = [\n\t\t\t\t\t\t\t\titem.writer.taskId ? `task=${item.writer.taskId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.delegateId ? `delegate=${item.writer.delegateId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.profile ? `profile=${item.writer.profile}` : undefined,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\t\t\tconst valuePart =\n\t\t\t\t\t\t\t\titem.value === undefined\n\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t: ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;\n\t\t\t\t\t\t\treturn `- ${item.key} v${item.version}${writer ? ` (${writer})` : \"\"}${valuePart}`;\n\t\t\t\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\" as const, text: [header, ...lines].join(\"\\n\") }],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: result.runId,\n\t\t\t\t\tscope: result.scope,\n\t\t\t\t\ttotalMatched: result.totalMatched,\n\t\t\t\t\titems: result.items.map((item) => summarizeSharedMemoryItemForDetails(item, input.include_values === true)),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport {\n\treadSharedMemory,\n\ttype SharedMemoryContext,\n\ttype SharedMemoryScope,\n\ttype SharedMemoryWriteMode,\n\twriteSharedMemory,\n} from \"../shared-memory.js\";\n\ntype SharedMemoryScopePolicy = \"legacy\" | \"warn\" | \"enforce\";\n\nfunction resolveSharedMemoryScopePolicy(raw: string | undefined): SharedMemoryScopePolicy {\n\tconst normalized = (raw ?? \"\").trim().toLowerCase();\n\tif (normalized === \"warn\") return \"warn\";\n\tif (normalized === \"enforce\") return \"enforce\";\n\treturn \"legacy\";\n}\n\nconst sharedMemoryScopePolicy = resolveSharedMemoryScopePolicy(process.env.IOSM_SHARED_MEMORY_SCOPE_POLICY);\n\nconst sharedMemoryWriteSchema = Type.Object({\n\tkey: Type.String({\n\t\tminLength: 1,\n\t\tdescription: \"Logical key for shared data within the current run (for example: findings/auth).\",\n\t}),\n\tvalue: Type.String({\n\t\tdescription: \"Text payload to store.\",\n\t}),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tmode: Type.Optional(\n\t\tType.Union([Type.Literal(\"set\"), Type.Literal(\"append\")], {\n\t\t\tdescription: \"set replaces value; append concatenates to existing value.\",\n\t\t}),\n\t),\n\tif_version: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tdescription: \"Optional CAS guard. Write succeeds only when current version matches this value.\",\n\t\t}),\n\t),\n});\n\nconst sharedMemoryReadSchema = Type.Object({\n\tkey: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Exact key to read. Mutually exclusive with prefix.\",\n\t\t}),\n\t),\n\tprefix: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Prefix filter for keys (for example: findings/).\",\n\t\t}),\n\t),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: 100,\n\t\t\tdescription: \"Maximum entries to return (default 20).\",\n\t\t}),\n\t),\n\tinclude_values: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"When false (default), returns only metadata (key/version/writer).\",\n\t\t}),\n\t),\n});\n\nexport type SharedMemoryWriteInput = Static<typeof sharedMemoryWriteSchema>;\nexport type SharedMemoryReadInput = Static<typeof sharedMemoryReadSchema>;\n\nfunction summarizeSharedMemoryItemForDetails(\n\titem: {\n\t\tkey: string;\n\t\tscope: SharedMemoryScope;\n\t\tversion: number;\n\t\tupdatedAt: string;\n\t\twriter: { taskId?: string; delegateId?: string; profile?: string };\n\t\tvalue?: string;\n\t},\n\tincludeValuePreview: boolean,\n): Record<string, unknown> {\n\tconst base: Record<string, unknown> = {\n\t\tkey: item.key,\n\t\tscope: item.scope,\n\t\tversion: item.version,\n\t\tupdatedAt: item.updatedAt,\n\t\twriter: item.writer,\n\t};\n\tif (typeof item.value !== \"string\") return base;\n\tconst valueLength = item.value.length;\n\tif (!includeValuePreview) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tvalueLength,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tvalueLength,\n\t\tvaluePreview: item.value.length > 200 ? `${item.value.slice(0, 197)}...` : item.value,\n\t};\n}\n\nfunction ensureContext(context: SharedMemoryContext): SharedMemoryContext {\n\tif (!context.runId || !context.runId.trim()) {\n\t\tthrow new Error(\"shared memory is unavailable: missing run_id context\");\n\t}\n\treturn context;\n}\n\nfunction summarizeWriter(context: SharedMemoryContext): string {\n\tconst parts = [context.taskId ? `task=${context.taskId}` : undefined, context.delegateId ? `delegate=${context.delegateId}` : undefined]\n\t\t.filter((item): item is string => Boolean(item))\n\t\t.join(\" \");\n\treturn parts.length > 0 ? parts : \"root\";\n}\n\nfunction resolveScope(input: {\n\tscope: SharedMemoryScope | undefined;\n\tcontext: SharedMemoryContext;\n\toperation: \"read\" | \"write\";\n}): { scope: SharedMemoryScope; warning?: string } {\n\tif (input.scope) return { scope: input.scope };\n\tif (sharedMemoryScopePolicy === \"enforce\") {\n\t\tthrow new Error(\n\t\t\t`shared_memory_${input.operation} requires explicit scope (\"run\" or \"task\"). ` +\n\t\t\t\t`Set IOSM_SHARED_MEMORY_SCOPE_POLICY=legacy to restore implicit defaults.`,\n\t\t);\n\t}\n\tconst shouldWarn = sharedMemoryScopePolicy === \"warn\" || input.context.profile === \"meta\";\n\tif (!shouldWarn) {\n\t\treturn { scope: \"task\" };\n\t}\n\treturn {\n\t\tscope: \"task\",\n\t\twarning: `scope omitted -> defaulted to \"task\" for shared_memory_${input.operation}. Pass explicit scope to avoid ambiguity.`,\n\t};\n}\n\nfunction normalizeMode(mode: SharedMemoryWriteMode | undefined): SharedMemoryWriteMode {\n\treturn mode ?? \"set\";\n}\n\nexport function createSharedMemoryWriteTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryWriteSchema> {\n\treturn {\n\t\tname: \"shared_memory_write\",\n\t\tlabel: \"shared_memory_write\",\n\t\tdescription:\n\t\t\t\"Write intermediate data into run-scoped shared memory so parallel agents/delegates can exchange state.\",\n\t\tparameters: sharedMemoryWriteSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryWriteInput;\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst scopeResolution = resolveScope({\n\t\t\t\tscope: input.scope,\n\t\t\t\tcontext: ensured,\n\t\t\t\toperation: \"write\",\n\t\t\t});\n\t\t\tconst result = await writeSharedMemory(ensured, {\n\t\t\t\tkey: input.key,\n\t\t\t\tvalue: input.value,\n\t\t\t\tscope: scopeResolution.scope,\n\t\t\t\tmode: normalizeMode(input.mode),\n\t\t\t\tifVersion: input.if_version,\n\t\t\t}, _signal);\n\t\t\tconst warningLine = scopeResolution.warning ? `\\nwarning: ${scopeResolution.warning}` : \"\";\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})${warningLine}`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: ensured.runId,\n\t\t\t\t\titem: summarizeSharedMemoryItemForDetails(result, false),\n\t\t\t\t\tscopePolicy: sharedMemoryScopePolicy,\n\t\t\t\t\tscopeWarning: scopeResolution.warning,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSharedMemoryReadTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryReadSchema> {\n\treturn {\n\t\tname: \"shared_memory_read\",\n\t\tlabel: \"shared_memory_read\",\n\t\tdescription:\n\t\t\t\"Read intermediate data from run-scoped shared memory (task-local or run-global view).\",\n\t\tparameters: sharedMemoryReadSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryReadInput;\n\t\t\tif (input.key && input.prefix) {\n\t\t\t\tthrow new Error(\"shared_memory_read accepts either key or prefix, not both\");\n\t\t\t}\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst scopeResolution = resolveScope({\n\t\t\t\tscope: input.scope,\n\t\t\t\tcontext: ensured,\n\t\t\t\toperation: \"read\",\n\t\t\t});\n\t\t\tconst result = await readSharedMemory(ensured, {\n\t\t\t\tscope: scopeResolution.scope,\n\t\t\t\tkey: input.key,\n\t\t\t\tprefix: input.prefix,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tincludeValues: input.include_values ?? false,\n\t\t\t}, _signal);\n\t\t\tconst header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;\n\t\t\tconst lines =\n\t\t\t\tresult.items.length === 0\n\t\t\t\t\t? [\"(no entries)\"]\n\t\t\t\t\t: result.items.map((item) => {\n\t\t\t\t\t\t\tconst writer = [\n\t\t\t\t\t\t\t\titem.writer.taskId ? `task=${item.writer.taskId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.delegateId ? `delegate=${item.writer.delegateId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.profile ? `profile=${item.writer.profile}` : undefined,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\t\t\tconst valuePart =\n\t\t\t\t\t\t\t\titem.value === undefined\n\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t: ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;\n\t\t\t\t\t\t\treturn `- ${item.key} v${item.version}${writer ? ` (${writer})` : \"\"}${valuePart}`;\n\t\t\t\t\t\t});\n\t\t\tif (scopeResolution.warning) {\n\t\t\t\tlines.unshift(`warning: ${scopeResolution.warning}`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\" as const, text: [header, ...lines].join(\"\\n\") }],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: result.runId,\n\t\t\t\t\tscope: result.scope,\n\t\t\t\t\ttotalMatched: result.totalMatched,\n\t\t\t\t\titems: result.items.map((item) => summarizeSharedMemoryItemForDetails(item, input.include_values === true)),\n\t\t\t\t\tscopePolicy: sharedMemoryScopePolicy,\n\t\t\t\t\tscopeWarning: scopeResolution.warning,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
2
2
|
import { type Static } from "@sinclair/typebox";
|
|
3
3
|
import { type FailureCause } from "../failure-retrospective.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type SharedMemoryContext } from "../shared-memory.js";
|
|
5
5
|
import type { CustomSubagentDefinition } from "../subagents.js";
|
|
6
6
|
/**
|
|
7
7
|
* Callback type passed in from sdk.ts to avoid circular imports.
|
|
@@ -94,6 +94,17 @@ export interface TaskToolDetails {
|
|
|
94
94
|
retrospectiveAttempts?: number;
|
|
95
95
|
retrospectiveRecovered?: number;
|
|
96
96
|
failureCauses?: Partial<Record<FailureCause, number>>;
|
|
97
|
+
coordination?: {
|
|
98
|
+
sharedMemoryWrites?: number;
|
|
99
|
+
currentTaskWrites?: number;
|
|
100
|
+
currentTaskDelegateWrites?: number;
|
|
101
|
+
runScopeWrites?: number;
|
|
102
|
+
taskScopeWrites?: number;
|
|
103
|
+
duplicatesDetected?: number;
|
|
104
|
+
claimKeysMatched?: number;
|
|
105
|
+
claimCollisions?: number;
|
|
106
|
+
};
|
|
107
|
+
sharedMemorySummaryKey?: string;
|
|
97
108
|
}
|
|
98
109
|
export interface TaskToolOptions {
|
|
99
110
|
resolveCustomSubagent?: (name: string) => CustomSubagentDefinition | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAKN,KAAK,YAAY,EACjB,MAAM,6BAA6B,CAAC;AAcrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"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"}
|