@harness-control/protocol 0.4.10 → 0.4.11

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 (64) hide show
  1. package/LICENSE +202 -202
  2. package/README.md +26 -26
  3. package/dist/accounts.d.ts +0 -0
  4. package/dist/accounts.js +0 -0
  5. package/dist/bin/conformance.d.ts +0 -0
  6. package/dist/bin/conformance.js +0 -0
  7. package/dist/bin/generate-json-schema.d.ts +0 -0
  8. package/dist/bin/generate-json-schema.js +0 -0
  9. package/dist/conformance.d.ts +0 -0
  10. package/dist/conformance.js +0 -0
  11. package/dist/conversation.d.ts +0 -0
  12. package/dist/conversation.js +0 -0
  13. package/dist/index.d.ts +30 -30
  14. package/dist/index.js +0 -0
  15. package/dist/json-schema.d.ts +0 -0
  16. package/dist/json-schema.js +0 -0
  17. package/dist/mcp-review.d.ts +0 -0
  18. package/dist/mcp-review.js +0 -0
  19. package/dist/native-review.d.ts +0 -0
  20. package/dist/native-review.js +0 -0
  21. package/dist/pairing.d.ts +0 -0
  22. package/dist/pairing.js +0 -0
  23. package/dist/session-reducer.d.ts +0 -0
  24. package/dist/session-reducer.js +0 -0
  25. package/fixtures/conformance/invalid/accounts-negative-quota.json +35 -35
  26. package/fixtures/conformance/invalid/accounts-secret.json +36 -36
  27. package/fixtures/conformance/invalid/arbitrary-event-family.json +13 -13
  28. package/fixtures/conformance/invalid/local-action-lease-binding-mismatch.json +49 -49
  29. package/fixtures/conformance/invalid/local-action-missing-turn-id.json +20 -20
  30. package/fixtures/conformance/invalid/local-action-patch-missing-base-hash.json +51 -51
  31. package/fixtures/conformance/invalid/local-action-shell-missing-approval.json +56 -56
  32. package/fixtures/conformance/invalid/mcp-stdio-attachment.json +27 -27
  33. package/fixtures/conformance/invalid/session-snapshot-unsafe-omission.json +26 -26
  34. package/fixtures/conformance/invalid/terminal-turn-missing-final-output.json +16 -16
  35. package/fixtures/conformance/invalid/unknown-payload-field.json +14 -14
  36. package/fixtures/conformance/invalid/unknown-top-level-field.json +14 -14
  37. package/fixtures/conformance/valid/accounts-read.json +11 -11
  38. package/fixtures/conformance/valid/accounts-snapshot.json +35 -35
  39. package/fixtures/conformance/valid/accounts-unavailable.json +21 -21
  40. package/fixtures/conformance/valid/command-ack.json +11 -11
  41. package/fixtures/conformance/valid/extension-event.json +18 -18
  42. package/fixtures/conformance/valid/host-hello.json +22 -22
  43. package/fixtures/conformance/valid/host-replay-unavailable.json +15 -15
  44. package/fixtures/conformance/valid/local-action-dev-server-start.json +68 -68
  45. package/fixtures/conformance/valid/local-action-dev-server-stop.json +52 -52
  46. package/fixtures/conformance/valid/local-action-error.json +38 -38
  47. package/fixtures/conformance/valid/local-action-filesystem-list.json +52 -52
  48. package/fixtures/conformance/valid/local-action-filesystem-patch.json +53 -53
  49. package/fixtures/conformance/valid/local-action-filesystem-read.json +51 -51
  50. package/fixtures/conformance/valid/local-action-filesystem-write.json +53 -53
  51. package/fixtures/conformance/valid/local-action-git-diff.json +53 -53
  52. package/fixtures/conformance/valid/local-action-git-status.json +51 -51
  53. package/fixtures/conformance/valid/local-action-response.json +49 -49
  54. package/fixtures/conformance/valid/local-action-shell-exec.json +63 -63
  55. package/fixtures/conformance/valid/provider-event.json +18 -18
  56. package/fixtures/conformance/valid/session-snapshot-request.json +9 -9
  57. package/fixtures/conformance/valid/session-snapshot.json +28 -28
  58. package/fixtures/conformance/valid/session-start-with-leases.json +85 -85
  59. package/fixtures/conformance/valid/session-start-with-runner-stdio-profile.json +27 -27
  60. package/fixtures/conformance/valid/turn-completed.json +30 -30
  61. package/fixtures/mcp-review.json +20 -20
  62. package/package.json +68 -68
  63. package/schemas/hcp-message.schema.json +0 -0
  64. package/schemas/mcp-review.json +0 -0
@@ -1,18 +1,18 @@
1
- {
2
- "id": "message-provider-event",
3
- "type": "harness.event",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:00.000Z",
6
- "payload": {
7
- "session_id": "session-1",
8
- "sequence": 2,
9
- "event_type": "provider.codex.native_event",
10
- "created_at": "2026-01-01T00:00:02.000Z",
11
- "data": {
12
- "summary": "Native provider event",
13
- "fields": {
14
- "provider_event_id": "evt-1"
15
- }
16
- }
17
- }
18
- }
1
+ {
2
+ "id": "message-provider-event",
3
+ "type": "harness.event",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:00.000Z",
6
+ "payload": {
7
+ "session_id": "session-1",
8
+ "sequence": 2,
9
+ "event_type": "provider.codex.native_event",
10
+ "created_at": "2026-01-01T00:00:02.000Z",
11
+ "data": {
12
+ "summary": "Native provider event",
13
+ "fields": {
14
+ "provider_event_id": "evt-1"
15
+ }
16
+ }
17
+ }
18
+ }
@@ -1,9 +1,9 @@
1
- {
2
- "id": "message-session-snapshot-request",
3
- "type": "harness.session.snapshot.request",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:00.000Z",
6
- "payload": {
7
- "session_id": "session-1"
8
- }
9
- }
1
+ {
2
+ "id": "message-session-snapshot-request",
3
+ "type": "harness.session.snapshot.request",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:00.000Z",
6
+ "payload": {
7
+ "session_id": "session-1"
8
+ }
9
+ }
@@ -1,28 +1,28 @@
1
- {
2
- "id": "message-session-snapshot",
3
- "type": "harness.session.snapshot",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:01.000Z",
6
- "payload": {
7
- "command_id": "message-session-snapshot-request",
8
- "session_id": "session-1",
9
- "generated_at": "2026-01-01T00:00:01.000Z",
10
- "completeness": "complete",
11
- "omission_semantics": "replace",
12
- "from_sequence": 1,
13
- "through_sequence": 1,
14
- "events": [
15
- {
16
- "session_id": "session-1",
17
- "sequence": 1,
18
- "event_type": "session.started",
19
- "created_at": "2026-01-01T00:00:00.500Z",
20
- "data": {
21
- "provider_instance_id": "provider-1",
22
- "workspace_id": "workspace-1"
23
- }
24
- }
25
- ],
26
- "tombstones": []
27
- }
28
- }
1
+ {
2
+ "id": "message-session-snapshot",
3
+ "type": "harness.session.snapshot",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:01.000Z",
6
+ "payload": {
7
+ "command_id": "message-session-snapshot-request",
8
+ "session_id": "session-1",
9
+ "generated_at": "2026-01-01T00:00:01.000Z",
10
+ "completeness": "complete",
11
+ "omission_semantics": "replace",
12
+ "from_sequence": 1,
13
+ "through_sequence": 1,
14
+ "events": [
15
+ {
16
+ "session_id": "session-1",
17
+ "sequence": 1,
18
+ "event_type": "session.started",
19
+ "created_at": "2026-01-01T00:00:00.500Z",
20
+ "data": {
21
+ "provider_instance_id": "provider-1",
22
+ "workspace_id": "workspace-1"
23
+ }
24
+ }
25
+ ],
26
+ "tombstones": []
27
+ }
28
+ }
@@ -1,85 +1,85 @@
1
- {
2
- "id": "message-session-start",
3
- "type": "harness.session.start",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:00.000Z",
6
- "payload": {
7
- "session_id": "session-1",
8
- "workspace_id": "workspace-1",
9
- "provider_instance_id": "provider-1",
10
- "driver_kind": "codex",
11
- "cwd": "/tmp/workspace",
12
- "sandbox_mode": "workspace_write",
13
- "approval_policy": "ask",
14
- "continue_session": false,
15
- "model_selection": {
16
- "model": "gpt-5.3-codex"
17
- },
18
- "workspace_preflight": {
19
- "workspace_id": "workspace-1",
20
- "expected_branch": "main",
21
- "allow_dirty_worktree": true
22
- },
23
- "local_capability_lease": {
24
- "lease_id": "local-lease-1",
25
- "actor_id": "user-1",
26
- "hcp_session_id": "session-1",
27
- "execution_host_id": "host-local",
28
- "provider_instance_id": "provider-1",
29
- "workspace_id": "workspace-1",
30
- "issued_at": "2026-01-01T00:00:00.000Z",
31
- "expires_at": "2026-01-01T01:00:00.000Z",
32
- "policy_version": "policy-2026-01-01",
33
- "capabilities": [
34
- {
35
- "id": "filesystem",
36
- "scopes": [
37
- "workspace_read",
38
- "workspace_write"
39
- ]
40
- },
41
- {
42
- "id": "shell",
43
- "scopes": [
44
- "workspace"
45
- ],
46
- "approval_policy": "ask",
47
- "command_policy": {
48
- "allowed_executables": [
49
- "npm"
50
- ],
51
- "denied_executables": [
52
- "rm"
53
- ],
54
- "cwd_policy": "selected_workspace_only",
55
- "env_policy": "minimal",
56
- "allow_shell": false,
57
- "timeout_seconds": 60,
58
- "network_policy": "inherit"
59
- }
60
- }
61
- ]
62
- },
63
- "mcp_servers": [
64
- {
65
- "name": "linear",
66
- "transport": "streamable_http",
67
- "url": "https://example.com/mcp/linear",
68
- "headers": {
69
- "Authorization": "Bearer lease-token"
70
- },
71
- "lease_id": "mcp-lease-1",
72
- "proof_of_possession": {
73
- "scheme": "runner_signed_request",
74
- "key_id": "proof-key-1",
75
- "required_headers": [
76
- "x-hcp-session-id",
77
- "x-hcp-host-id",
78
- "x-hcp-proof-signature",
79
- "x-hcp-proof-nonce"
80
- ]
81
- }
82
- }
83
- ]
84
- }
85
- }
1
+ {
2
+ "id": "message-session-start",
3
+ "type": "harness.session.start",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:00.000Z",
6
+ "payload": {
7
+ "session_id": "session-1",
8
+ "workspace_id": "workspace-1",
9
+ "provider_instance_id": "provider-1",
10
+ "driver_kind": "codex",
11
+ "cwd": "/tmp/workspace",
12
+ "sandbox_mode": "workspace_write",
13
+ "approval_policy": "ask",
14
+ "continue_session": false,
15
+ "model_selection": {
16
+ "model": "gpt-5.3-codex"
17
+ },
18
+ "workspace_preflight": {
19
+ "workspace_id": "workspace-1",
20
+ "expected_branch": "main",
21
+ "allow_dirty_worktree": true
22
+ },
23
+ "local_capability_lease": {
24
+ "lease_id": "local-lease-1",
25
+ "actor_id": "user-1",
26
+ "hcp_session_id": "session-1",
27
+ "execution_host_id": "host-local",
28
+ "provider_instance_id": "provider-1",
29
+ "workspace_id": "workspace-1",
30
+ "issued_at": "2026-01-01T00:00:00.000Z",
31
+ "expires_at": "2026-01-01T01:00:00.000Z",
32
+ "policy_version": "policy-2026-01-01",
33
+ "capabilities": [
34
+ {
35
+ "id": "filesystem",
36
+ "scopes": [
37
+ "workspace_read",
38
+ "workspace_write"
39
+ ]
40
+ },
41
+ {
42
+ "id": "shell",
43
+ "scopes": [
44
+ "workspace"
45
+ ],
46
+ "approval_policy": "ask",
47
+ "command_policy": {
48
+ "allowed_executables": [
49
+ "npm"
50
+ ],
51
+ "denied_executables": [
52
+ "rm"
53
+ ],
54
+ "cwd_policy": "selected_workspace_only",
55
+ "env_policy": "minimal",
56
+ "allow_shell": false,
57
+ "timeout_seconds": 60,
58
+ "network_policy": "inherit"
59
+ }
60
+ }
61
+ ]
62
+ },
63
+ "mcp_servers": [
64
+ {
65
+ "name": "linear",
66
+ "transport": "streamable_http",
67
+ "url": "https://example.com/mcp/linear",
68
+ "headers": {
69
+ "Authorization": "Bearer lease-token"
70
+ },
71
+ "lease_id": "mcp-lease-1",
72
+ "proof_of_possession": {
73
+ "scheme": "runner_signed_request",
74
+ "key_id": "proof-key-1",
75
+ "required_headers": [
76
+ "x-hcp-session-id",
77
+ "x-hcp-host-id",
78
+ "x-hcp-proof-signature",
79
+ "x-hcp-proof-nonce"
80
+ ]
81
+ }
82
+ }
83
+ ]
84
+ }
85
+ }
@@ -1,27 +1,27 @@
1
- {
2
- "id": "message-runner-stdio-profile",
3
- "type": "harness.session.start",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:00.000Z",
6
- "payload": {
7
- "session_id": "session-stdio-1",
8
- "workspace_id": "workspace-1",
9
- "provider_instance_id": "provider-1",
10
- "driver_kind": "codex",
11
- "cwd": "/tmp/workspace",
12
- "sandbox_mode": "workspace_write",
13
- "approval_policy": "ask",
14
- "continue_session": false,
15
- "model_selection": {
16
- "model": "gpt-5.3-codex"
17
- },
18
- "mcp_servers": [
19
- {
20
- "name": "local-tools",
21
- "transport": "runner_stdio_profile",
22
- "profile_id": "sample-tools",
23
- "allowed_tools": ["echo"]
24
- }
25
- ]
26
- }
27
- }
1
+ {
2
+ "id": "message-runner-stdio-profile",
3
+ "type": "harness.session.start",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:00.000Z",
6
+ "payload": {
7
+ "session_id": "session-stdio-1",
8
+ "workspace_id": "workspace-1",
9
+ "provider_instance_id": "provider-1",
10
+ "driver_kind": "codex",
11
+ "cwd": "/tmp/workspace",
12
+ "sandbox_mode": "workspace_write",
13
+ "approval_policy": "ask",
14
+ "continue_session": false,
15
+ "model_selection": {
16
+ "model": "gpt-5.3-codex"
17
+ },
18
+ "mcp_servers": [
19
+ {
20
+ "name": "local-tools",
21
+ "transport": "runner_stdio_profile",
22
+ "profile_id": "sample-tools",
23
+ "allowed_tools": ["echo"]
24
+ }
25
+ ]
26
+ }
27
+ }
@@ -1,30 +1,30 @@
1
- {
2
- "id": "message-turn-completed",
3
- "type": "harness.event",
4
- "version": "hcp.v0",
5
- "sent_at": "2026-01-01T00:00:00.000Z",
6
- "payload": {
7
- "session_id": "session-1",
8
- "turn_id": "turn-1",
9
- "sequence": 4,
10
- "event_type": "turn.completed",
11
- "created_at": "2026-01-01T00:00:04.000Z",
12
- "data": {
13
- "status": "accepted",
14
- "final_output": {
15
- "final_text": "Done.",
16
- "changed_files": [
17
- {
18
- "path": "README.md",
19
- "change_type": "modified"
20
- }
21
- ],
22
- "usage": {
23
- "input_tokens": 10,
24
- "output_tokens": 5,
25
- "total_tokens": 15
26
- }
27
- }
28
- }
29
- }
30
- }
1
+ {
2
+ "id": "message-turn-completed",
3
+ "type": "harness.event",
4
+ "version": "hcp.v0",
5
+ "sent_at": "2026-01-01T00:00:00.000Z",
6
+ "payload": {
7
+ "session_id": "session-1",
8
+ "turn_id": "turn-1",
9
+ "sequence": 4,
10
+ "event_type": "turn.completed",
11
+ "created_at": "2026-01-01T00:00:04.000Z",
12
+ "data": {
13
+ "status": "accepted",
14
+ "final_output": {
15
+ "final_text": "Done.",
16
+ "changed_files": [
17
+ {
18
+ "path": "README.md",
19
+ "change_type": "modified"
20
+ }
21
+ ],
22
+ "usage": {
23
+ "input_tokens": 10,
24
+ "output_tokens": 5,
25
+ "total_tokens": 15
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
@@ -1,20 +1,20 @@
1
- [
2
- {
3
- "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"server\",\"tool_name\":\"write\",\"arguments\":{\"text\":\"é🙂\"}}",
4
- "valid": true,
5
- "sha256": "f56beacaa38c8377403c751206b8c1998b45d6cc9a146d84c3e1ede2652ce7c4"
6
- },
7
- {
8
- "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"server\",\"tool_name\":\"write\",\"arguments\":{}}",
9
- "valid": true,
10
- "sha256": "3a571ac3eec173ae039bedda0a3c015b7e3577af92efce1b6c1b6949d06cf8c0"
11
- },
12
- {
13
- "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"\",\"tool_name\":\"write\",\"arguments\":{}}",
14
- "valid": false
15
- },
16
- {
17
- "action_json": "{}",
18
- "valid": false
19
- }
20
- ]
1
+ [
2
+ {
3
+ "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"server\",\"tool_name\":\"write\",\"arguments\":{\"text\":\"é🙂\"}}",
4
+ "valid": true,
5
+ "sha256": "f56beacaa38c8377403c751206b8c1998b45d6cc9a146d84c3e1ede2652ce7c4"
6
+ },
7
+ {
8
+ "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"server\",\"tool_name\":\"write\",\"arguments\":{}}",
9
+ "valid": true,
10
+ "sha256": "3a571ac3eec173ae039bedda0a3c015b7e3577af92efce1b6c1b6949d06cf8c0"
11
+ },
12
+ {
13
+ "action_json": "{\"kind\":\"mcp_tool\",\"attachment_name\":\"\",\"tool_name\":\"write\",\"arguments\":{}}",
14
+ "valid": false
15
+ },
16
+ {
17
+ "action_json": "{}",
18
+ "valid": false
19
+ }
20
+ ]
package/package.json CHANGED
@@ -1,68 +1,68 @@
1
- {
2
- "name": "@harness-control/protocol",
3
- "version": "0.4.10",
4
- "license": "Apache-2.0",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "bin": {
9
- "hcp-protocol-conformance": "./dist/bin/conformance.js"
10
- },
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- },
16
- "./conformance": {
17
- "types": "./dist/conformance.d.ts",
18
- "import": "./dist/conformance.js"
19
- },
20
- "./json-schema": {
21
- "types": "./dist/json-schema.d.ts",
22
- "import": "./dist/json-schema.js"
23
- },
24
- "./schema.json": {
25
- "default": "./schemas/hcp-message.schema.json"
26
- },
27
- "./package.json": "./package.json",
28
- "./mcp-review.json": {
29
- "default": "./schemas/mcp-review.json"
30
- },
31
- "./mcp-review-fixtures.json": {
32
- "default": "./fixtures/mcp-review.json"
33
- }
34
- },
35
- "scripts": {
36
- "build": "tsc -b && npm run schema:generate",
37
- "check": "tsc -b --pretty false",
38
- "conformance": "tsx src/bin/conformance.ts --fixtures fixtures/conformance",
39
- "schema:generate": "tsx src/bin/generate-json-schema.ts",
40
- "test": "tsx --test src/**/*.test.ts test/**/*.test.ts"
41
- },
42
- "dependencies": {
43
- "zod": "4.4.3"
44
- },
45
- "description": "Types, validation, JSON Schema and reducers for Harness Control Protocol",
46
- "engines": {
47
- "node": ">=22"
48
- },
49
- "publishConfig": {
50
- "access": "public"
51
- },
52
- "repository": {
53
- "type": "git",
54
- "url": "git+https://github.com/qazisaad/harness-control-protocol.git",
55
- "directory": "packages/hcp-protocol"
56
- },
57
- "files": [
58
- "dist",
59
- "!dist/**/*.test.*",
60
- "!dist/**/test/**",
61
- "!dist/**/*.map",
62
- "README.md",
63
- "LICENSE",
64
- "schemas",
65
- "fixtures/conformance",
66
- "fixtures/mcp-review.json"
67
- ]
68
- }
1
+ {
2
+ "name": "@harness-control/protocol",
3
+ "version": "0.4.11",
4
+ "license": "Apache-2.0",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "hcp-protocol-conformance": "./dist/bin/conformance.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./conformance": {
17
+ "types": "./dist/conformance.d.ts",
18
+ "import": "./dist/conformance.js"
19
+ },
20
+ "./json-schema": {
21
+ "types": "./dist/json-schema.d.ts",
22
+ "import": "./dist/json-schema.js"
23
+ },
24
+ "./schema.json": {
25
+ "default": "./schemas/hcp-message.schema.json"
26
+ },
27
+ "./package.json": "./package.json",
28
+ "./mcp-review.json": {
29
+ "default": "./schemas/mcp-review.json"
30
+ },
31
+ "./mcp-review-fixtures.json": {
32
+ "default": "./fixtures/mcp-review.json"
33
+ }
34
+ },
35
+ "scripts": {
36
+ "build": "tsc -b && npm run schema:generate",
37
+ "check": "tsc -b --pretty false",
38
+ "conformance": "tsx src/bin/conformance.ts --fixtures fixtures/conformance",
39
+ "schema:generate": "tsx src/bin/generate-json-schema.ts",
40
+ "test": "tsx --test src/**/*.test.ts test/**/*.test.ts"
41
+ },
42
+ "dependencies": {
43
+ "zod": "4.4.3"
44
+ },
45
+ "description": "Types, validation, JSON Schema and reducers for Harness Control Protocol",
46
+ "engines": {
47
+ "node": ">=22"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/qazisaad/harness-control-protocol.git",
55
+ "directory": "packages/hcp-protocol"
56
+ },
57
+ "files": [
58
+ "dist",
59
+ "!dist/**/*.test.*",
60
+ "!dist/**/test/**",
61
+ "!dist/**/*.map",
62
+ "README.md",
63
+ "LICENSE",
64
+ "schemas",
65
+ "fixtures/conformance",
66
+ "fixtures/mcp-review.json"
67
+ ]
68
+ }
File without changes
File without changes