iosm-cli 0.2.0 → 0.2.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 (90) hide show
  1. package/README.md +58 -47
  2. package/dist/core/agent-teams.d.ts.map +1 -1
  3. package/dist/core/agent-teams.js +38 -11
  4. package/dist/core/agent-teams.js.map +1 -1
  5. package/dist/core/failure-retrospective.d.ts +12 -0
  6. package/dist/core/failure-retrospective.d.ts.map +1 -0
  7. package/dist/core/failure-retrospective.js +115 -0
  8. package/dist/core/failure-retrospective.js.map +1 -0
  9. package/dist/core/project-index/index.d.ts +17 -0
  10. package/dist/core/project-index/index.d.ts.map +1 -0
  11. package/dist/core/project-index/index.js +323 -0
  12. package/dist/core/project-index/index.js.map +1 -0
  13. package/dist/core/project-index/types.d.ts +34 -0
  14. package/dist/core/project-index/types.d.ts.map +1 -0
  15. package/dist/core/project-index/types.js +2 -0
  16. package/dist/core/project-index/types.js.map +1 -0
  17. package/dist/core/sdk.d.ts.map +1 -1
  18. package/dist/core/sdk.js +8 -0
  19. package/dist/core/sdk.js.map +1 -1
  20. package/dist/core/shared-memory.d.ts +46 -0
  21. package/dist/core/shared-memory.d.ts.map +1 -0
  22. package/dist/core/shared-memory.js +253 -0
  23. package/dist/core/shared-memory.js.map +1 -0
  24. package/dist/core/slash-commands.d.ts.map +1 -1
  25. package/dist/core/slash-commands.js +5 -1
  26. package/dist/core/slash-commands.js.map +1 -1
  27. package/dist/core/subagents.js +1 -1
  28. package/dist/core/subagents.js.map +1 -1
  29. package/dist/core/swarm/gates.d.ts +9 -0
  30. package/dist/core/swarm/gates.d.ts.map +1 -0
  31. package/dist/core/swarm/gates.js +65 -0
  32. package/dist/core/swarm/gates.js.map +1 -0
  33. package/dist/core/swarm/index.d.ts +9 -0
  34. package/dist/core/swarm/index.d.ts.map +1 -0
  35. package/dist/core/swarm/index.js +9 -0
  36. package/dist/core/swarm/index.js.map +1 -0
  37. package/dist/core/swarm/locks.d.ts +21 -0
  38. package/dist/core/swarm/locks.d.ts.map +1 -0
  39. package/dist/core/swarm/locks.js +93 -0
  40. package/dist/core/swarm/locks.js.map +1 -0
  41. package/dist/core/swarm/planner.d.ts +16 -0
  42. package/dist/core/swarm/planner.d.ts.map +1 -0
  43. package/dist/core/swarm/planner.js +137 -0
  44. package/dist/core/swarm/planner.js.map +1 -0
  45. package/dist/core/swarm/retry.d.ts +16 -0
  46. package/dist/core/swarm/retry.d.ts.map +1 -0
  47. package/dist/core/swarm/retry.js +32 -0
  48. package/dist/core/swarm/retry.js.map +1 -0
  49. package/dist/core/swarm/scheduler.d.ts +48 -0
  50. package/dist/core/swarm/scheduler.d.ts.map +1 -0
  51. package/dist/core/swarm/scheduler.js +554 -0
  52. package/dist/core/swarm/scheduler.js.map +1 -0
  53. package/dist/core/swarm/spawn.d.ts +16 -0
  54. package/dist/core/swarm/spawn.d.ts.map +1 -0
  55. package/dist/core/swarm/spawn.js +42 -0
  56. package/dist/core/swarm/spawn.js.map +1 -0
  57. package/dist/core/swarm/state-store.d.ts +35 -0
  58. package/dist/core/swarm/state-store.d.ts.map +1 -0
  59. package/dist/core/swarm/state-store.js +106 -0
  60. package/dist/core/swarm/state-store.js.map +1 -0
  61. package/dist/core/swarm/types.d.ts +116 -0
  62. package/dist/core/swarm/types.d.ts.map +1 -0
  63. package/dist/core/swarm/types.js +2 -0
  64. package/dist/core/swarm/types.js.map +1 -0
  65. package/dist/core/system-prompt.d.ts.map +1 -1
  66. package/dist/core/system-prompt.js +3 -2
  67. package/dist/core/system-prompt.js.map +1 -1
  68. package/dist/core/tools/shared-memory.d.ts +23 -0
  69. package/dist/core/tools/shared-memory.d.ts.map +1 -0
  70. package/dist/core/tools/shared-memory.js +134 -0
  71. package/dist/core/tools/shared-memory.js.map +1 -0
  72. package/dist/core/tools/task.d.ts +8 -1
  73. package/dist/core/tools/task.d.ts.map +1 -1
  74. package/dist/core/tools/task.js +664 -123
  75. package/dist/core/tools/task.js.map +1 -1
  76. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  77. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  78. package/dist/modes/interactive/components/login-dialog.js +27 -4
  79. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  80. package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -1
  81. package/dist/modes/interactive/components/subagent-message.js +14 -0
  82. package/dist/modes/interactive/components/subagent-message.js.map +1 -1
  83. package/dist/modes/interactive/interactive-mode.d.ts +38 -0
  84. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  85. package/dist/modes/interactive/interactive-mode.js +1362 -31
  86. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  87. package/docs/cli-reference.md +11 -1
  88. package/docs/interactive-mode.md +42 -3
  89. package/docs/orchestration-and-subagents.md +96 -169
  90. package/package.json +4 -3
@@ -0,0 +1,134 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { readSharedMemory, writeSharedMemory, } from "../shared-memory.js";
3
+ const sharedMemoryWriteSchema = Type.Object({
4
+ key: Type.String({
5
+ minLength: 1,
6
+ description: "Logical key for shared data within the current run (for example: findings/auth).",
7
+ }),
8
+ value: Type.String({
9
+ description: "Text payload to store.",
10
+ }),
11
+ scope: Type.Optional(Type.Union([Type.Literal("run"), Type.Literal("task")], {
12
+ description: "run = visible to all tasks in run_id; task = isolated to current task_id.",
13
+ })),
14
+ mode: Type.Optional(Type.Union([Type.Literal("set"), Type.Literal("append")], {
15
+ description: "set replaces value; append concatenates to existing value.",
16
+ })),
17
+ if_version: Type.Optional(Type.Integer({
18
+ minimum: 1,
19
+ description: "Optional CAS guard. Write succeeds only when current version matches this value.",
20
+ })),
21
+ });
22
+ const sharedMemoryReadSchema = Type.Object({
23
+ key: Type.Optional(Type.String({
24
+ minLength: 1,
25
+ description: "Exact key to read. Mutually exclusive with prefix.",
26
+ })),
27
+ prefix: Type.Optional(Type.String({
28
+ minLength: 1,
29
+ description: "Prefix filter for keys (for example: findings/).",
30
+ })),
31
+ scope: Type.Optional(Type.Union([Type.Literal("run"), Type.Literal("task")], {
32
+ description: "run = visible to all tasks in run_id; task = isolated to current task_id.",
33
+ })),
34
+ limit: Type.Optional(Type.Integer({
35
+ minimum: 1,
36
+ maximum: 100,
37
+ description: "Maximum entries to return (default 20).",
38
+ })),
39
+ include_values: Type.Optional(Type.Boolean({
40
+ description: "When false, returns only metadata (key/version/writer).",
41
+ })),
42
+ });
43
+ function ensureContext(context) {
44
+ if (!context.runId || !context.runId.trim()) {
45
+ throw new Error("shared memory is unavailable: missing run_id context");
46
+ }
47
+ return context;
48
+ }
49
+ function summarizeWriter(context) {
50
+ const parts = [context.taskId ? `task=${context.taskId}` : undefined, context.delegateId ? `delegate=${context.delegateId}` : undefined]
51
+ .filter((item) => Boolean(item))
52
+ .join(" ");
53
+ return parts.length > 0 ? parts : "root";
54
+ }
55
+ function normalizeScope(scope) {
56
+ return scope ?? "task";
57
+ }
58
+ function normalizeMode(mode) {
59
+ return mode ?? "set";
60
+ }
61
+ export function createSharedMemoryWriteTool(context) {
62
+ return {
63
+ name: "shared_memory_write",
64
+ label: "shared_memory_write",
65
+ description: "Write intermediate data into run-scoped shared memory so parallel agents/delegates can exchange state.",
66
+ parameters: sharedMemoryWriteSchema,
67
+ execute: async (_toolCallId, params, _signal) => {
68
+ const input = params;
69
+ const ensured = ensureContext(context);
70
+ const result = await writeSharedMemory(ensured, {
71
+ key: input.key,
72
+ value: input.value,
73
+ scope: normalizeScope(input.scope),
74
+ mode: normalizeMode(input.mode),
75
+ ifVersion: input.if_version,
76
+ });
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})`,
82
+ },
83
+ ],
84
+ details: {
85
+ runId: ensured.runId,
86
+ item: result,
87
+ },
88
+ };
89
+ },
90
+ };
91
+ }
92
+ export function createSharedMemoryReadTool(context) {
93
+ return {
94
+ name: "shared_memory_read",
95
+ label: "shared_memory_read",
96
+ description: "Read intermediate data from run-scoped shared memory (task-local or run-global view).",
97
+ parameters: sharedMemoryReadSchema,
98
+ execute: async (_toolCallId, params, _signal) => {
99
+ const input = params;
100
+ if (input.key && input.prefix) {
101
+ throw new Error("shared_memory_read accepts either key or prefix, not both");
102
+ }
103
+ const ensured = ensureContext(context);
104
+ const result = await readSharedMemory(ensured, {
105
+ scope: normalizeScope(input.scope),
106
+ key: input.key,
107
+ prefix: input.prefix,
108
+ limit: input.limit,
109
+ includeValues: input.include_values ?? true,
110
+ });
111
+ const header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;
112
+ const lines = result.items.length === 0
113
+ ? ["(no entries)"]
114
+ : result.items.map((item) => {
115
+ const writer = [
116
+ item.writer.taskId ? `task=${item.writer.taskId}` : undefined,
117
+ item.writer.delegateId ? `delegate=${item.writer.delegateId}` : undefined,
118
+ item.writer.profile ? `profile=${item.writer.profile}` : undefined,
119
+ ]
120
+ .filter((value) => Boolean(value))
121
+ .join(" ");
122
+ const valuePart = item.value === undefined
123
+ ? ""
124
+ : ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;
125
+ return `- ${item.key} v${item.version}${writer ? ` (${writer})` : ""}${valuePart}`;
126
+ });
127
+ return {
128
+ content: [{ type: "text", text: [header, ...lines].join("\n") }],
129
+ details: result,
130
+ };
131
+ },
132
+ };
133
+ }
134
+ //# sourceMappingURL=shared-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACN,gBAAgB,EAIhB,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,kFAAkF;KAC/F,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,wBAAwB;KACrC,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACvD,WAAW,EAAE,2EAA2E;KACxF,CAAC,CACF;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;QACzD,WAAW,EAAE,4DAA4D;KACzE,CAAC,CACF;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,kFAAkF;KAC/F,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,GAAG,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,oDAAoD;KACjE,CAAC,CACF;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,kDAAkD;KAC/D,CAAC,CACF;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACvD,WAAW,EAAE,2EAA2E;KACxF,CAAC,CACF;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,yCAAyC;KACtD,CAAC,CACF;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC5B,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EAAE,yDAAyD;KACtE,CAAC,CACF;CACD,CAAC,CAAC;AAKH,SAAS,aAAa,CAAC,OAA4B;IAClD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,OAA4B;IACpD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SACtI,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAoC;IAC3D,OAAO,KAAK,IAAI,MAAM,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAuC;IAC7D,OAAO,IAAI,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA4B;IACvE,OAAO;QACN,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACV,wGAAwG;QACzG,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAAe,EAAE,OAAqB,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,MAAgC,CAAC;YAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE;gBAC/C,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/B,SAAS,EAAE,KAAK,CAAC,UAAU;aAC3B,CAAC,CAAC;YACH,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,0BAA0B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,OAAO,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;qBAC/G;iBACD;gBACD,OAAO,EAAE;oBACR,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAA4B;IACtE,OAAO;QACN,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACV,uFAAuF;QACxF,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAAe,EAAE,OAAqB,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,MAA+B,CAAC;YAC9C,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;gBAC9C,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,aAAa,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;aAC3C,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9F,MAAM,KAAK,GACV,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,CAAC,cAAc,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC1B,MAAM,MAAM,GAAG;wBACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;wBAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;wBACzE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;qBAClE;yBACC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;yBAClD,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,MAAM,SAAS,GACd,IAAI,CAAC,KAAK,KAAK,SAAS;wBACvB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtF,OAAO,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;gBACpF,CAAC,CAAC,CAAC;YACN,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzE,OAAO,EAAE,MAAM;aACf,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC","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, 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 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});\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: result,\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 ?? true,\n\t\t\t});\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: result,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  import type { AgentTool } from "@mariozechner/pi-agent-core";
2
2
  import { type Static } from "@sinclair/typebox";
3
+ import { type FailureCause } from "../failure-retrospective.js";
4
+ import type { SharedMemoryContext } from "../shared-memory.js";
3
5
  import type { CustomSubagentDefinition } from "../subagents.js";
4
6
  /**
5
7
  * Callback type passed in from sdk.ts to avoid circular imports.
@@ -43,6 +45,7 @@ export type SubagentRunner = (options: {
43
45
  prompt: string;
44
46
  cwd: string;
45
47
  modelOverride?: string;
48
+ sharedMemoryContext?: SharedMemoryContext;
46
49
  signal?: AbortSignal;
47
50
  onProgress?: (progress: TaskToolProgress) => void;
48
51
  }) => Promise<string | SubagentRunResult>;
@@ -50,7 +53,7 @@ declare const taskSchema: import("@sinclair/typebox").TObject<{
50
53
  description: import("@sinclair/typebox").TString;
51
54
  prompt: import("@sinclair/typebox").TString;
52
55
  agent: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
53
- profile: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"explore">, import("@sinclair/typebox").TLiteral<"plan">, import("@sinclair/typebox").TLiteral<"iosm">, import("@sinclair/typebox").TLiteral<"iosm_analyst">, import("@sinclair/typebox").TLiteral<"iosm_verifier">, import("@sinclair/typebox").TLiteral<"cycle_planner">, import("@sinclair/typebox").TLiteral<"full">]>;
56
+ profile: import("@sinclair/typebox").TString;
54
57
  cwd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
55
58
  lock_key: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
56
59
  run_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -58,6 +61,7 @@ declare const taskSchema: import("@sinclair/typebox").TObject<{
58
61
  model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
59
62
  background: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
60
63
  isolation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"worktree">]>>;
64
+ delegate_parallel_hint: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
61
65
  }>;
62
66
  export type TaskToolInput = Static<typeof taskSchema>;
63
67
  /** Details attached to the tool result for UI display */
@@ -84,6 +88,9 @@ export interface TaskToolDetails {
84
88
  delegatedTasks?: number;
85
89
  delegatedSucceeded?: number;
86
90
  delegatedFailed?: number;
91
+ retrospectiveAttempts?: number;
92
+ retrospectiveRecovered?: number;
93
+ failureCauses?: Partial<Record<FailureCause, number>>;
87
94
  }
88
95
  export interface TaskToolOptions {
89
96
  resolveCustomSubagent?: (name: string) => CustomSubagentDefinition | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"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"}