toolcraft 0.0.23 → 0.0.24

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 (147) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.compile-check.js +1 -0
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.js +50 -13
  5. package/dist/error-report.js +32 -3
  6. package/dist/human-in-loop/approval-tasks.d.ts +1 -0
  7. package/dist/human-in-loop/approval-tasks.js +7 -5
  8. package/dist/human-in-loop/approvals-commands.js +51 -8
  9. package/dist/human-in-loop/runner.js +24 -19
  10. package/dist/human-in-loop/state-machine.d.ts +3 -3
  11. package/dist/human-in-loop/state-machine.js +13 -5
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +6 -1
  14. package/dist/mcp-proxy.js +85 -19
  15. package/dist/mcp.compile-check.js +1 -0
  16. package/dist/mcp.d.ts +1 -0
  17. package/dist/mcp.js +50 -8
  18. package/dist/renderer.js +119 -13
  19. package/dist/sdk.compile-check.js +1 -0
  20. package/dist/sdk.d.ts +1 -0
  21. package/dist/sdk.js +56 -11
  22. package/node_modules/@poe-code/agent-defs/dist/registry.d.ts +1 -1
  23. package/node_modules/@poe-code/agent-defs/dist/registry.js +22 -11
  24. package/node_modules/@poe-code/agent-defs/package.json +1 -1
  25. package/node_modules/@poe-code/agent-human-in-loop/dist/providers/osascript-script.js +5 -1
  26. package/node_modules/@poe-code/agent-human-in-loop/dist/providers/osascript.js +1 -1
  27. package/node_modules/@poe-code/agent-human-in-loop/package.json +1 -1
  28. package/node_modules/@poe-code/agent-mcp-config/dist/apply.d.ts +1 -1
  29. package/node_modules/@poe-code/agent-mcp-config/dist/apply.js +41 -92
  30. package/node_modules/@poe-code/agent-mcp-config/dist/configs.js +4 -1
  31. package/node_modules/@poe-code/agent-mcp-config/dist/shapes.d.ts +14 -2
  32. package/node_modules/@poe-code/agent-mcp-config/dist/shapes.js +11 -4
  33. package/node_modules/@poe-code/agent-mcp-config/package.json +1 -1
  34. package/node_modules/@poe-code/config-mutations/dist/execution/apply-mutation.js +200 -22
  35. package/node_modules/@poe-code/config-mutations/dist/execution/path-utils.js +7 -1
  36. package/node_modules/@poe-code/config-mutations/dist/formats/index.js +1 -1
  37. package/node_modules/@poe-code/config-mutations/dist/formats/json.js +11 -7
  38. package/node_modules/@poe-code/config-mutations/dist/formats/object.d.ts +4 -0
  39. package/node_modules/@poe-code/config-mutations/dist/formats/object.js +27 -0
  40. package/node_modules/@poe-code/config-mutations/dist/formats/toml.js +12 -9
  41. package/node_modules/@poe-code/config-mutations/dist/formats/yaml.js +12 -9
  42. package/node_modules/@poe-code/config-mutations/dist/mutations/file-mutation.d.ts +11 -1
  43. package/node_modules/@poe-code/config-mutations/dist/mutations/file-mutation.js +10 -1
  44. package/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.js +25 -1
  45. package/node_modules/@poe-code/config-mutations/dist/types.d.ts +12 -2
  46. package/node_modules/@poe-code/config-mutations/package.json +1 -1
  47. package/node_modules/@poe-code/design-system/dist/acp/components.js +3 -1
  48. package/node_modules/@poe-code/design-system/dist/components/browser.d.ts +1 -1
  49. package/node_modules/@poe-code/design-system/dist/components/browser.js +6 -1
  50. package/node_modules/@poe-code/design-system/dist/components/color.js +9 -8
  51. package/node_modules/@poe-code/design-system/dist/components/command-errors.js +3 -2
  52. package/node_modules/@poe-code/design-system/dist/components/detail-card.d.ts +22 -0
  53. package/node_modules/@poe-code/design-system/dist/components/detail-card.js +69 -0
  54. package/node_modules/@poe-code/design-system/dist/components/help-formatter.js +88 -11
  55. package/node_modules/@poe-code/design-system/dist/components/index.d.ts +1 -1
  56. package/node_modules/@poe-code/design-system/dist/components/index.js +1 -1
  57. package/node_modules/@poe-code/design-system/dist/components/table.d.ts +2 -0
  58. package/node_modules/@poe-code/design-system/dist/components/table.js +82 -5
  59. package/node_modules/@poe-code/design-system/dist/components/template.d.ts +4 -0
  60. package/node_modules/@poe-code/design-system/dist/components/template.js +198 -32
  61. package/node_modules/@poe-code/design-system/dist/components/text.js +29 -5
  62. package/node_modules/@poe-code/design-system/dist/dashboard/ansi.d.ts +2 -2
  63. package/node_modules/@poe-code/design-system/dist/dashboard/ansi.js +77 -32
  64. package/node_modules/@poe-code/design-system/dist/dashboard/buffer.js +28 -5
  65. package/node_modules/@poe-code/design-system/dist/dashboard/components/output-pane.js +45 -28
  66. package/node_modules/@poe-code/design-system/dist/dashboard/terminal-width.d.ts +4 -0
  67. package/node_modules/@poe-code/design-system/dist/dashboard/terminal-width.js +71 -0
  68. package/node_modules/@poe-code/design-system/dist/dashboard/types.d.ts +1 -0
  69. package/node_modules/@poe-code/design-system/dist/explorer/events.d.ts +6 -0
  70. package/node_modules/@poe-code/design-system/dist/explorer/reducer.js +32 -10
  71. package/node_modules/@poe-code/design-system/dist/explorer/render/detail.js +3 -0
  72. package/node_modules/@poe-code/design-system/dist/explorer/runtime.js +57 -6
  73. package/node_modules/@poe-code/design-system/dist/explorer/state.d.ts +1 -0
  74. package/node_modules/@poe-code/design-system/dist/explorer/state.js +12 -15
  75. package/node_modules/@poe-code/design-system/dist/index.d.ts +3 -1
  76. package/node_modules/@poe-code/design-system/dist/index.js +2 -1
  77. package/node_modules/@poe-code/design-system/dist/prompts/primitives/intro.js +2 -1
  78. package/node_modules/@poe-code/design-system/dist/prompts/primitives/log.js +8 -5
  79. package/node_modules/@poe-code/design-system/dist/prompts/primitives/note.js +1 -1
  80. package/node_modules/@poe-code/design-system/dist/static/menu.js +8 -2
  81. package/node_modules/@poe-code/design-system/dist/static/spinner.js +10 -4
  82. package/node_modules/@poe-code/design-system/dist/terminal-markdown/parser/frontmatter.js +9 -2
  83. package/node_modules/@poe-code/design-system/dist/terminal-markdown/renderer.js +19 -2
  84. package/node_modules/@poe-code/design-system/package.json +2 -1
  85. package/node_modules/@poe-code/process-runner/dist/docker/docker-execution-env.js +244 -110
  86. package/node_modules/@poe-code/process-runner/dist/docker/docker-runner.js +16 -4
  87. package/node_modules/@poe-code/process-runner/dist/host/host-execution-env.js +3 -2
  88. package/node_modules/@poe-code/process-runner/dist/host/host-runner.js +16 -1
  89. package/node_modules/@poe-code/process-runner/dist/index.d.ts +1 -0
  90. package/node_modules/@poe-code/process-runner/dist/index.js +1 -0
  91. package/node_modules/@poe-code/process-runner/dist/testing/mock-runner.js +30 -8
  92. package/node_modules/@poe-code/process-runner/dist/types.d.ts +3 -0
  93. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.d.ts +57 -0
  94. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.js +484 -0
  95. package/node_modules/@poe-code/process-runner/package.json +1 -1
  96. package/node_modules/@poe-code/task-list/README.md +0 -2
  97. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.js +3 -0
  98. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-sync.js +89 -59
  99. package/node_modules/@poe-code/task-list/dist/backends/gh-issues.d.ts +9 -3
  100. package/node_modules/@poe-code/task-list/dist/backends/gh-issues.js +460 -99
  101. package/node_modules/@poe-code/task-list/dist/backends/markdown-dir.js +156 -154
  102. package/node_modules/@poe-code/task-list/dist/backends/utils.d.ts +2 -0
  103. package/node_modules/@poe-code/task-list/dist/backends/utils.js +79 -0
  104. package/node_modules/@poe-code/task-list/dist/backends/yaml-file.js +120 -132
  105. package/node_modules/@poe-code/task-list/dist/index.d.ts +3 -1
  106. package/node_modules/@poe-code/task-list/dist/index.js +2 -0
  107. package/node_modules/@poe-code/task-list/dist/move.d.ts +2 -0
  108. package/node_modules/@poe-code/task-list/dist/move.js +215 -0
  109. package/node_modules/@poe-code/task-list/dist/open.js +3 -4
  110. package/node_modules/@poe-code/task-list/dist/state-machine.js +3 -1
  111. package/node_modules/@poe-code/task-list/dist/state.js +9 -0
  112. package/node_modules/@poe-code/task-list/dist/types.d.ts +48 -13
  113. package/node_modules/@poe-code/task-list/package.json +1 -2
  114. package/node_modules/auth-store/dist/create-secret-store.js +4 -1
  115. package/node_modules/auth-store/dist/encrypted-file-store.d.ts +7 -0
  116. package/node_modules/auth-store/dist/encrypted-file-store.js +69 -7
  117. package/node_modules/auth-store/dist/index.d.ts +1 -1
  118. package/node_modules/auth-store/dist/keychain-store.d.ts +4 -1
  119. package/node_modules/auth-store/dist/keychain-store.js +18 -16
  120. package/node_modules/auth-store/dist/provider-store.d.ts +5 -1
  121. package/node_modules/auth-store/dist/provider-store.js +55 -7
  122. package/node_modules/auth-store/dist/types.d.ts +3 -1
  123. package/node_modules/auth-store/package.json +2 -1
  124. package/node_modules/mcp-oauth/dist/client/default-oauth-client-provider.js +46 -15
  125. package/node_modules/mcp-oauth/dist/client/loopback-authorization.js +49 -12
  126. package/node_modules/mcp-oauth/dist/client/token-endpoint.js +6 -1
  127. package/node_modules/mcp-oauth/dist/server/jwks-token-verifier.js +1 -1
  128. package/node_modules/mcp-oauth/package.json +1 -0
  129. package/node_modules/tiny-mcp-client/.turbo/turbo-build.log +1 -1
  130. package/node_modules/tiny-mcp-client/dist/internal.d.ts +8 -4
  131. package/node_modules/tiny-mcp-client/dist/internal.js +237 -67
  132. package/node_modules/tiny-mcp-client/dist/oauth-discovery.d.ts +1 -1
  133. package/node_modules/tiny-mcp-client/dist/oauth-discovery.js +4 -7
  134. package/node_modules/tiny-mcp-client/package.json +2 -1
  135. package/node_modules/tiny-mcp-client/src/http-oauth.integration.test.ts +1 -1
  136. package/node_modules/tiny-mcp-client/src/http-oauth.test.ts +46 -0
  137. package/node_modules/tiny-mcp-client/src/internal.ts +279 -77
  138. package/node_modules/tiny-mcp-client/src/mcp-client-tiny-stdio-test-server-tools.test.ts +1 -1
  139. package/node_modules/tiny-mcp-client/src/oauth-discovery.ts +5 -10
  140. package/node_modules/tiny-mcp-client/src/transports.test.ts +588 -6
  141. package/package.json +10 -12
  142. package/node_modules/@poe-code/file-lock/README.md +0 -52
  143. package/node_modules/@poe-code/file-lock/dist/index.d.ts +0 -1
  144. package/node_modules/@poe-code/file-lock/dist/index.js +0 -1
  145. package/node_modules/@poe-code/file-lock/dist/lock.d.ts +0 -27
  146. package/node_modules/@poe-code/file-lock/dist/lock.js +0 -203
  147. package/node_modules/@poe-code/file-lock/package.json +0 -23
@@ -31,12 +31,13 @@ export const hostExecutionEnvFactory = {
31
31
  return createHostRunner().exec({
32
32
  command: shellSpec?.command ?? openSpec.env.SHELL ?? process.env.SHELL ?? "sh",
33
33
  ...(shellSpec?.args ? { args: shellSpec.args } : {}),
34
- cwd: openSpec.cwd,
34
+ cwd: shellSpec?.cwd ?? openSpec.cwd,
35
35
  env: shellSpec && "env" in shellSpec ? shellSpec.env : openSpec.env,
36
36
  stdin: "inherit",
37
37
  stdout: "inherit",
38
38
  stderr: "inherit",
39
- tty: true
39
+ tty: true,
40
+ signal: shellSpec?.signal
40
41
  });
41
42
  },
42
43
  async close() { }
@@ -4,6 +4,16 @@ export function createHostRunner(options = {}) {
4
4
  return {
5
5
  name: "host",
6
6
  exec(spec) {
7
+ if (spec.signal?.aborted === true) {
8
+ return {
9
+ pid: null,
10
+ stdin: null,
11
+ stdout: null,
12
+ stderr: null,
13
+ result: Promise.resolve({ exitCode: 1 }),
14
+ kill() { }
15
+ };
16
+ }
7
17
  const stdinMode = spec.stdin ?? "ignore";
8
18
  const stdoutMode = spec.stdout ?? "pipe";
9
19
  const stderrMode = spec.stderr ?? "pipe";
@@ -32,7 +42,12 @@ export function createHostRunner(options = {}) {
32
42
  resolveResult = resolve;
33
43
  });
34
44
  const cleanupAbort = bindAbortSignal(spec.signal, () => {
35
- kill("SIGTERM");
45
+ try {
46
+ kill("SIGTERM");
47
+ }
48
+ catch {
49
+ return;
50
+ }
36
51
  });
37
52
  child.once("close", (code) => {
38
53
  if (settled)
@@ -5,4 +5,5 @@ export { buildDockerRuntimeTemplate, dockerExecutionEnvFactory } from "./docker/
5
5
  export { hostExecutionEnvFactory } from "./host/host-execution-env.js";
6
6
  export { createHostRunner } from "./host/host-runner.js";
7
7
  export { createMockRunner, createMockRunnerByCommand } from "./testing/index.js";
8
+ export { downloadWorkspace, uploadWorkspace, type WorkspaceDownloadOptions, type WorkspaceTransferDirent, type WorkspaceTransferEnv, type WorkspaceTransferFileSystem, type WorkspaceTransferOptions, type WorkspaceTransferRunnerOptions, type WorkspaceTransferStats } from "./workspace-transfer.js";
8
9
  export type { DownloadResult, DockerMount, DockerPortMapping, DockerRunArgs, DockerRunnerOptions, Engine, ExecutionState, ExecutionEnvFactory, ExecutionEnvType, HostRunnerOptions, JobHandle, JobStatus, LogChunk, MockRunBehavior, OpenedEnv, OpenSpec, RunHandle, RunResult, Runner, RunSpec, TemplateEntry, UploadResult } from "./types.js";
@@ -5,3 +5,4 @@ export { buildDockerRuntimeTemplate, dockerExecutionEnvFactory } from "./docker/
5
5
  export { hostExecutionEnvFactory } from "./host/host-execution-env.js";
6
6
  export { createHostRunner } from "./host/host-runner.js";
7
7
  export { createMockRunner, createMockRunnerByCommand } from "./testing/index.js";
8
+ export { downloadWorkspace, uploadWorkspace } from "./workspace-transfer.js";
@@ -16,7 +16,9 @@ export function createMockRunnerByCommand(behaviorsByCommand) {
16
16
  return {
17
17
  name: "mock",
18
18
  exec(spec) {
19
- const behavior = behaviorsByCommand[spec.command];
19
+ const behavior = Object.prototype.hasOwnProperty.call(behaviorsByCommand, spec.command)
20
+ ? behaviorsByCommand[spec.command]
21
+ : undefined;
20
22
  if (behavior === undefined) {
21
23
  throw new Error(`No mock run behavior found for command "${spec.command}"`);
22
24
  }
@@ -29,12 +31,19 @@ function createRunHandle(spec, behavior) {
29
31
  const stderrMode = spec.stderr ?? "pipe";
30
32
  const stdinMode = spec.stdin ?? "ignore";
31
33
  const interval = behavior.stdoutInterval ?? 10;
34
+ if (behavior.exitAfterMs !== undefined && (!Number.isFinite(behavior.exitAfterMs) || behavior.exitAfterMs < 0)) {
35
+ throw new Error("Mock run exitAfterMs must be a finite non-negative number.");
36
+ }
32
37
  const stdoutController = stdoutMode === "pipe" && behavior.stdout !== undefined
33
38
  ? createReadableStream(behavior.stdout, interval)
34
39
  : null;
35
40
  const stderrController = stderrMode === "pipe" && behavior.stderr !== undefined
36
41
  ? createReadableStream(behavior.stderr, interval)
37
42
  : null;
43
+ const outputDone = Promise.all([
44
+ ...(stdoutController === null ? [] : [stdoutController.done]),
45
+ ...(stderrController === null ? [] : [stderrController.done])
46
+ ]);
38
47
  let resolveResult = null;
39
48
  const result = new Promise((resolve) => {
40
49
  resolveResult = resolve;
@@ -51,10 +60,18 @@ function createRunHandle(spec, behavior) {
51
60
  stdoutController?.stop();
52
61
  stderrController?.stop();
53
62
  };
54
- const exitAfterMs = behavior.exitAfterMs ?? 0;
55
- const exitTimer = exitAfterMs > 0
56
- ? setTimeout(complete, exitAfterMs)
57
- : queueMicrotask(complete);
63
+ const exitAfterMs = behavior.exitAfterMs;
64
+ const exitTimer = exitAfterMs === undefined
65
+ ? undefined
66
+ : exitAfterMs > 0
67
+ ? setTimeout(complete, exitAfterMs)
68
+ : undefined;
69
+ if (exitAfterMs === undefined) {
70
+ void outputDone.then(complete);
71
+ }
72
+ else if (exitAfterMs === 0) {
73
+ queueMicrotask(complete);
74
+ }
58
75
  return {
59
76
  pid: behavior.pid ?? null,
60
77
  stdout: stdoutController?.stream ?? null,
@@ -62,7 +79,7 @@ function createRunHandle(spec, behavior) {
62
79
  stdin: stdinMode === "pipe" ? createWritableStream() : null,
63
80
  result,
64
81
  kill() {
65
- if (typeof exitTimer === "object" && exitTimer !== null && "hasRef" in exitTimer) {
82
+ if (exitTimer !== undefined) {
66
83
  clearTimeout(exitTimer);
67
84
  }
68
85
  stopStreams();
@@ -76,6 +93,10 @@ function createReadableStream(lines, interval) {
76
93
  });
77
94
  const timers = new Set();
78
95
  let stopped = false;
96
+ let resolveDone;
97
+ const done = new Promise((resolve) => {
98
+ resolveDone = resolve;
99
+ });
79
100
  const stop = () => {
80
101
  if (stopped) {
81
102
  return;
@@ -86,10 +107,11 @@ function createReadableStream(lines, interval) {
86
107
  }
87
108
  timers.clear();
88
109
  stream.push(null);
110
+ resolveDone?.();
89
111
  };
90
112
  if (lines.length === 0) {
91
113
  queueMicrotask(stop);
92
- return { stream, stop };
114
+ return { done, stream, stop };
93
115
  }
94
116
  for (const [index, line] of lines.entries()) {
95
117
  const timer = setTimeout(() => {
@@ -104,7 +126,7 @@ function createReadableStream(lines, interval) {
104
126
  }, interval * (index + 1));
105
127
  timers.add(timer);
106
128
  }
107
- return { stream, stop };
129
+ return { done, stream, stop };
108
130
  }
109
131
  function createWritableStream() {
110
132
  return new Writable({
@@ -103,10 +103,12 @@ export interface AttachedJobContext {
103
103
  tool: string;
104
104
  argv: string[];
105
105
  cwd: string;
106
+ reattachContext?: Record<string, unknown>;
106
107
  }
107
108
  export interface OpenedEnv {
108
109
  readonly id: string;
109
110
  readonly job: JobHandle | null;
111
+ readonly reattachContext?: Record<string, unknown>;
110
112
  uploadWorkspace(): Promise<UploadResult>;
111
113
  downloadWorkspace(opts: {
112
114
  conflictPolicy: "refuse" | "overwrite";
@@ -125,6 +127,7 @@ export interface JobHandle {
125
127
  stream(opts?: {
126
128
  sinceByte?: number;
127
129
  since?: Date;
130
+ follow?: boolean;
128
131
  }): AsyncIterable<LogChunk>;
129
132
  wait(): Promise<{
130
133
  exitCode: number;
@@ -0,0 +1,57 @@
1
+ import type { DownloadResult, UploadResult } from "./types.js";
2
+ export type { DownloadResult, UploadResult } from "./types.js";
3
+ export interface WorkspaceTransferDirent {
4
+ name: string;
5
+ isFile(): boolean;
6
+ isDirectory(): boolean;
7
+ }
8
+ export interface WorkspaceTransferStats {
9
+ isFile(): boolean;
10
+ isDirectory(): boolean;
11
+ isSymbolicLink?(): boolean;
12
+ size: number;
13
+ }
14
+ export interface WorkspaceTransferFileSystem {
15
+ mkdir(path: string, options?: {
16
+ recursive?: boolean;
17
+ }): Promise<void>;
18
+ readdir(path: string, options: {
19
+ withFileTypes: true;
20
+ }): Promise<WorkspaceTransferDirent[]>;
21
+ readFile(path: string): Promise<Buffer>;
22
+ readFile(path: string, encoding: BufferEncoding): Promise<string>;
23
+ writeFile(path: string, data: string | Buffer): Promise<void>;
24
+ stat(path: string): Promise<WorkspaceTransferStats>;
25
+ lstat?(path: string): Promise<WorkspaceTransferStats>;
26
+ rename?(oldPath: string, newPath: string): Promise<void>;
27
+ rm?(path: string, options?: {
28
+ recursive?: boolean;
29
+ force?: boolean;
30
+ }): Promise<void>;
31
+ unlink?(path: string): Promise<void>;
32
+ rmdir?(path: string): Promise<void>;
33
+ }
34
+ export interface WorkspaceTransferEnv {
35
+ cwd: string;
36
+ uploadDir: string;
37
+ workspaceDir?: string;
38
+ fs?: WorkspaceTransferFileSystem;
39
+ remoteFs?: WorkspaceTransferFileSystem;
40
+ }
41
+ export interface WorkspaceTransferOptions {
42
+ runner?: WorkspaceTransferRunnerOptions;
43
+ uploadMaxFileMb?: number;
44
+ workspaceExclude?: string[];
45
+ warn?: (message: string) => void;
46
+ }
47
+ export interface WorkspaceTransferRunnerOptions {
48
+ upload_max_file_mb?: number;
49
+ workspace?: {
50
+ exclude?: string[];
51
+ };
52
+ }
53
+ export interface WorkspaceDownloadOptions {
54
+ conflictPolicy: "refuse" | "overwrite";
55
+ }
56
+ export declare function uploadWorkspace(env: WorkspaceTransferEnv, opts: WorkspaceTransferOptions): Promise<UploadResult>;
57
+ export declare function downloadWorkspace(env: WorkspaceTransferEnv, opts: WorkspaceDownloadOptions): Promise<DownloadResult>;