@kingsoftcloud/agentkit-harness-node 0.0.0-stage → 0.0.2

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 (151) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +1 -0
  3. package/README.md +124 -2
  4. package/THIRD_PARTY_NOTICES.md +66 -0
  5. package/ZCode-LICENSE +202 -0
  6. package/dist/index.mjs +4871 -0
  7. package/dist/native-command-plan.LICENSE.txt +221 -0
  8. package/dist/native-command-plan.json +16 -0
  9. package/dist/native-command-plan.mjs +8 -0
  10. package/dist/rpc-entry.mjs +5682 -0
  11. package/package.json +169 -4
  12. package/src/native/a2a-receipt-source.mjs +19 -0
  13. package/src/native/a2a-tools.mjs +517 -0
  14. package/src/native/activity-status.mjs +30 -0
  15. package/src/native/artifact-codec.mjs +481 -0
  16. package/src/native/artifact-store.mjs +1162 -0
  17. package/src/native/assistant-stream.mjs +76 -0
  18. package/src/native/background-command-port.mjs +95 -0
  19. package/src/native/browser-action-observation.mjs +43 -0
  20. package/src/native/browser-availability.mjs +22 -0
  21. package/src/native/browser-canvas-metrics.mjs +71 -0
  22. package/src/native/browser-dom.mjs +193 -0
  23. package/src/native/browser-playwright.mjs +1249 -0
  24. package/src/native/browser-vision.mjs +369 -0
  25. package/src/native/browser-workspace-policy.mjs +22 -0
  26. package/src/native/browser-workspace-protocol.mjs +95 -0
  27. package/src/native/browser-workspace-server.mjs +164 -0
  28. package/src/native/browser-workspace.mjs +355 -0
  29. package/src/native/captured-source.mjs +3 -0
  30. package/src/native/child-budget-allocation.mjs +87 -0
  31. package/src/native/child-capabilities.mjs +35 -0
  32. package/src/native/child-command-resource.mjs +20 -0
  33. package/src/native/child-history.mjs +188 -0
  34. package/src/native/child-merge.mjs +98 -0
  35. package/src/native/child-model-surface.mjs +19 -0
  36. package/src/native/child-observation.mjs +100 -0
  37. package/src/native/child-owner.mjs +620 -0
  38. package/src/native/child-publication.mjs +76 -0
  39. package/src/native/child-readers.mjs +366 -0
  40. package/src/native/child-tools.mjs +46 -0
  41. package/src/native/child-workspace-binding.mjs +29 -0
  42. package/src/native/child-workspace-tools.mjs +1 -0
  43. package/src/native/child-workspaces.mjs +655 -0
  44. package/src/native/children.mjs +365 -0
  45. package/src/native/command-plan-worker.mjs +14 -0
  46. package/src/native/command-plan.mjs +31 -0
  47. package/src/native/command-progress.mjs +64 -0
  48. package/src/native/command-shell.mjs +9 -0
  49. package/src/native/command-workspace-observation.mjs +36 -0
  50. package/src/native/component-tools.mjs +280 -0
  51. package/src/native/context-counter.mjs +133 -0
  52. package/src/native/context-markers.mjs +51 -0
  53. package/src/native/context-profile.mjs +72 -0
  54. package/src/native/context-status.mjs +27 -0
  55. package/src/native/conversation-command-control.mjs +133 -0
  56. package/src/native/delivery-timeline.mjs +39 -0
  57. package/src/native/dsh-background-ownership.mjs +102 -0
  58. package/src/native/dsh-managed-ownership.mjs +23 -0
  59. package/src/native/dsh-turn-contract.mjs +3 -0
  60. package/src/native/dsh-turn-ownership.mjs +54 -0
  61. package/src/native/dsh-turn-runtime.mjs +498 -0
  62. package/src/native/e2b-background-supervisor.mjs +347 -0
  63. package/src/native/e2b-background.mjs +368 -0
  64. package/src/native/e2b-command-state.mjs +40 -0
  65. package/src/native/e2b-command-tools.mjs +486 -0
  66. package/src/native/e2b-sandbox-owner.mjs +227 -0
  67. package/src/native/hook-executor.mjs +249 -0
  68. package/src/native/instruction-assembly.mjs +60 -0
  69. package/src/native/instruction-context.mjs +54 -0
  70. package/src/native/local-background-supervisor.mjs +108 -0
  71. package/src/native/local-background.mjs +207 -0
  72. package/src/native/local-command-evidence.mjs +57 -0
  73. package/src/native/local-command-policy-worker.mjs +197 -0
  74. package/src/native/local-command-policy.mjs +46 -0
  75. package/src/native/local-command-state.mjs +177 -0
  76. package/src/native/local-command-tools.mjs +302 -0
  77. package/src/native/local-execution-profile.mjs +36 -0
  78. package/src/native/local-output-policy.mjs +92 -0
  79. package/src/native/local-process-bin/darwin-arm64/launcher +0 -0
  80. package/src/native/local-process-bin/darwin-x64/launcher +0 -0
  81. package/src/native/local-process-bin/linux-arm64/launcher +0 -0
  82. package/src/native/local-process-bin/linux-x64/launcher +0 -0
  83. package/src/native/local-process-launcher.c +183 -0
  84. package/src/native/local-process-licenses/GCC-COPYING.RUNTIME +72 -0
  85. package/src/native/local-process-licenses/GCC-COPYING3 +674 -0
  86. package/src/native/local-process-licenses/NOTICE +21 -0
  87. package/src/native/local-process-licenses/musl-COPYRIGHT +193 -0
  88. package/src/native/local-process-manifest.json +32 -0
  89. package/src/native/local-process.mjs +246 -0
  90. package/src/native/local-resource-profile.mjs +32 -0
  91. package/src/native/memory-candidate.mjs +121 -0
  92. package/src/native/memory-extraction-run.mjs +60 -0
  93. package/src/native/memory-extraction-tools.mjs +116 -0
  94. package/src/native/memory-recall.mjs +65 -0
  95. package/src/native/memory-store.mjs +334 -0
  96. package/src/native/memory-tools.mjs +329 -0
  97. package/src/native/model-anthropic-cache.mjs +49 -0
  98. package/src/native/model-anthropic-tool-search.mjs +85 -0
  99. package/src/native/model-anthropic.mjs +753 -0
  100. package/src/native/model-chat-usage.mjs +24 -0
  101. package/src/native/model-inline-reasoning.mjs +111 -0
  102. package/src/native/model-media.mjs +174 -0
  103. package/src/native/model-normalize.mjs +228 -0
  104. package/src/native/model-openai-chat.mjs +561 -0
  105. package/src/native/model-port.mjs +361 -0
  106. package/src/native/model-provider-compat.mjs +129 -0
  107. package/src/native/model-replay.mjs +153 -0
  108. package/src/native/model-request.mjs +15 -0
  109. package/src/native/model-responses.mjs +1205 -0
  110. package/src/native/model-sse.mjs +171 -0
  111. package/src/native/model-surface-host.mjs +27 -0
  112. package/src/native/model-tool-search-policy.mjs +16 -0
  113. package/src/native/model-transport-observation.mjs +27 -0
  114. package/src/native/owned-child.mjs +114 -0
  115. package/src/native/owned-command.mjs +106 -0
  116. package/src/native/python-syntax-worker.mjs +60 -0
  117. package/src/native/python-syntax.mjs +50 -0
  118. package/src/native/read-interruption.mjs +16 -0
  119. package/src/native/result-stream.mjs +63 -0
  120. package/src/native/ruff-ast.mjs +95 -0
  121. package/src/native/run-observation.mjs +128 -0
  122. package/src/native/session-delivery-journal.mjs +96 -0
  123. package/src/native/session-delivery.mjs +434 -0
  124. package/src/native/shell-analysis.mjs +50 -0
  125. package/src/native/skill-disclosure.mjs +404 -0
  126. package/src/native/skill-events.mjs +164 -0
  127. package/src/native/skill-tools.mjs +813 -0
  128. package/src/native/source-page.mjs +73 -0
  129. package/src/native/sqlite-session-inbox.mjs +42 -0
  130. package/src/native/sqlite-store.mjs +617 -0
  131. package/src/native/tool-authority.mjs +99 -0
  132. package/src/native/tool-guidance.mjs +12 -0
  133. package/src/native/tool-observation.mjs +75 -0
  134. package/src/native/tool-states.mjs +14 -0
  135. package/src/native/verification-authority.mjs +37 -0
  136. package/src/native/web-tools.mjs +643 -0
  137. package/src/native/workspace-checkpoints.mjs +312 -0
  138. package/src/native/workspace-context.mjs +61 -0
  139. package/src/native/workspace-display.mjs +39 -0
  140. package/src/native/workspace-edit-match.mjs +19 -0
  141. package/src/native/workspace-edit-worker.mjs +15 -0
  142. package/src/native/workspace-editing.mjs +447 -0
  143. package/src/native/workspace-image.mjs +72 -0
  144. package/src/native/workspace-instructions.mjs +107 -0
  145. package/src/native/workspace-mutation-lock.mjs +74 -0
  146. package/src/native/workspace-patch-worker.mjs +17 -0
  147. package/src/native/workspace-patch.mjs +17 -0
  148. package/src/native/workspace-paths.mjs +225 -0
  149. package/src/native/workspace-state.mjs +272 -0
  150. package/src/native/workspace-subject-observer.mjs +84 -0
  151. package/src/native/workspace-tools.mjs +1740 -0
@@ -0,0 +1,84 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { constants } from 'node:fs';
3
+ import { lstat, open, readdir, realpath } from 'node:fs/promises';
4
+ import { isAbsolute, join, relative, resolve, sep } from 'node:path';
5
+ import { canonical, validateWorkspaceObservationSubject } from '@kingsoftcloud/agentkit-harness-core';
6
+
7
+ const inside = (root, path) => { const tail = relative(root, path); return !tail || !isAbsolute(tail) && tail !== '..' && !tail.startsWith('..' + sep); };
8
+ const identity = info => `${info.dev}:${info.ino}:${info.mode}:${info.size}:${info.mtimeNs}:${info.ctimeNs}`;
9
+ const fail = code => { throw Object.assign(new Error(code), { code }); };
10
+
11
+ /** Observation only: no execution or verifier authority. Every selected file
12
+ * is hashed twice under one shared byte/entry budget; unrelated trees are never
13
+ * traversed. Like the legacy observer, this is not an atomic filesystem snapshot. */
14
+ export async function captureWorkspaceSubject({ root, subject: input, signal, maxEntries = 2048, maxBytes = 64 * 1024 * 1024 }) {
15
+ const subject = validateWorkspaceObservationSubject(input);
16
+ if (!Number.isSafeInteger(maxEntries) || maxEntries < 1 || !Number.isSafeInteger(maxBytes) || maxBytes < 1)
17
+ fail('invalid_workspace_capture_limits');
18
+ const pinned = await realpath(root);
19
+ if (pinned !== root) fail('workspace_root_changed');
20
+ const check = async path => {
21
+ signal?.throwIfAborted();
22
+ if (!inside(root, path) || !inside(root, await realpath(path))) fail('workspace_path_outside_scope');
23
+ };
24
+ const capture = async () => {
25
+ const hash = createHash('sha256').update('agentkit.workspace-subject-revision/v1\0').update(canonical(subject));
26
+ const entries = [], seen = new Set(); let bytes = 0;
27
+ const visit = async (path, tree) => {
28
+ signal?.throwIfAborted();
29
+ if (seen.has(path)) return;
30
+ seen.add(path);
31
+ if (seen.size > maxEntries) fail('capture_limit_exceeded');
32
+ await check(path);
33
+ const before = await lstat(path, { bigint: true }), stamp = identity(before);
34
+ // Following a link would add undeclared dependencies. Refuse to claim a
35
+ // complete observation; no outside file is opened or silently omitted.
36
+ if (before.isSymbolicLink()) fail('unsupported_workspace_entry');
37
+ const rel = relative(root, path).split(sep).join('/') || '.';
38
+ hash.update(`\0path:${rel}\0mode:${before.mode & 0o777n}`);
39
+ if (before.isDirectory()) {
40
+ if (!tree) fail('workspace_subject_file_required');
41
+ hash.update('\0directory');
42
+ for (const name of (await readdir(path)).sort()) {
43
+ // Repository metadata is not a delivered dependency. Dependencies
44
+ // such as node_modules are otherwise included when inside a tree.
45
+ if (name === '.git') continue;
46
+ await visit(join(path, name), true);
47
+ }
48
+ } else if (before.isFile()) {
49
+ if (before.size > BigInt(maxBytes - bytes)) fail('capture_limit_exceeded');
50
+ const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
51
+ try {
52
+ if (identity(await handle.stat({ bigint: true })) !== stamp) fail('workspace_changed_during_capture');
53
+ const fileHash = createHash('sha256'), buffer = Buffer.allocUnsafe(65536); let count = 0;
54
+ while (count < Number(before.size)) {
55
+ signal?.throwIfAborted();
56
+ const { bytesRead } = await handle.read(buffer, 0, Math.min(buffer.length, Number(before.size) - count), null);
57
+ if (!bytesRead) fail('workspace_changed_during_capture');
58
+ count += bytesRead; bytes += bytesRead;
59
+ if (bytes > maxBytes) fail('capture_limit_exceeded');
60
+ fileHash.update(buffer.subarray(0, bytesRead));
61
+ }
62
+ if (identity(await handle.stat({ bigint: true })) !== stamp) fail('workspace_changed_during_capture');
63
+ hash.update('\0file\0').update(fileHash.digest());
64
+ } finally { await handle.close(); }
65
+ } else fail('unsupported_workspace_entry');
66
+ await check(path);
67
+ if (identity(await lstat(path, { bigint: true })) !== stamp) fail('workspace_changed_during_capture');
68
+ entries.push(`${rel}\0${stamp}`);
69
+ };
70
+ // Trees before files make overlapping declarations deterministic and avoid
71
+ // accidentally replacing a tree selection with a prior single-file visit.
72
+ const trees = [...new Set(subject.artifacts.filter(item => item.kind === 'web').map(item => item.root))].sort();
73
+ for (const path of trees) await visit(resolve(root, path), true);
74
+ for (const item of [...subject.artifacts].sort((a,b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0))
75
+ await visit(resolve(root, item.path), false);
76
+ if (await realpath(root) !== pinned) fail('workspace_root_changed');
77
+ entries.sort();
78
+ return { digest: hash.digest('hex'), entries };
79
+ };
80
+ const first = await capture(), second = await capture();
81
+ signal?.throwIfAborted();
82
+ if (first.digest !== second.digest || canonical(first.entries) !== canonical(second.entries)) fail('workspace_changed_during_capture');
83
+ return { revision: 'sha256:' + second.digest, changedPaths: [], status: 'ok', reason: null, subject };
84
+ }