opencode-ship 1.1.1 → 1.1.2-rc.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-ship",
3
- "version": "1.1.1",
3
+ "version": "1.1.2-rc.2",
4
4
  "private": false,
5
5
  "description": "npm-distributed OpenCode installer that materializes the delivery plugin, reviewer/verifier agents, skills, ship config and lock into any consumer repository.",
6
6
  "license": "MIT",
@@ -6,13 +6,13 @@
6
6
  "required": ["contractVersion", "manager", "files", "integrity"],
7
7
  "additionalProperties": false,
8
8
  "properties": {
9
- "contractVersion": { "enum": [1, 2, 3] },
9
+ "contractVersion": { "enum": [1, 2, 3, 4] },
10
10
  "manager": {
11
11
  "type": "object",
12
12
  "required": ["schemaVersion", "name", "version", "appliedAt", "config"],
13
13
  "additionalProperties": false,
14
14
  "properties": {
15
- "schemaVersion": { "enum": [1, 2, 3] },
15
+ "schemaVersion": { "enum": [1, 2, 3, 4] },
16
16
  "name": { "type": "string", "pattern": "^opencode-ship$" },
17
17
  "version": { "type": "string", "minLength": 1 },
18
18
  "templateSet": { "type": "string", "minLength": 1 },
@@ -21,6 +21,10 @@
21
21
  "description": "Profile the lock was applied under. Required on locks written at schema 2; absent on legacy schema-1 locks (resolved to core by the profile precedence layer)."
22
22
  },
23
23
  "appliedAt": { "type": "string", "format": "date-time" },
24
+ "setupComplete": {
25
+ "type": "boolean",
26
+ "description": "True when the consumer has finished the chat-only setup workflow. Sole writer is the opencode-ship setup-complete command."
27
+ },
24
28
  "config": {
25
29
  "type": "object",
26
30
  "required": ["path", "sha256"],
@@ -79,7 +83,7 @@
79
83
  "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
80
84
  "mode": { "type": "integer", "minimum": 0, "maximum": 511 },
81
85
  "template": { "type": "string", "minLength": 1 },
82
- "kind": { "enum": ["plugin", "agent", "skill", "config", "lock"] }
86
+ "kind": { "enum": ["plugin", "agent", "skill", "config", "lock", "support"] }
83
87
  }
84
88
  }
85
89
  },
@@ -98,21 +102,6 @@
98
102
  "opencodeMin": { "type": "string" },
99
103
  "coreVersion": { "type": "string" }
100
104
  }
101
- },
102
- "cleanupPending": {
103
- "type": "array",
104
- "description": "Tasks whose immediate post-merge cleanup could not complete; retry on next delivery task or plugin startup.",
105
- "items": {
106
- "type": "object",
107
- "required": ["taskId", "failedAt", "stage", "reason"],
108
- "additionalProperties": false,
109
- "properties": {
110
- "taskId": { "type": "string" },
111
- "failedAt": { "type": "string", "format": "date-time" },
112
- "stage": { "enum": ["preconditions", "worktree-remove", "branch-delete", "manifest-seal", "manifest-delete"] },
113
- "reason": { "type": "string" }
114
- }
115
- }
116
105
  }
117
106
  }
118
107
  }
@@ -1,9 +1,9 @@
1
1
  /*
2
2
  * Canonical opencode-ship tool set.
3
3
  *
4
- * The bundled plugin registers exactly 24 typed tools (9
5
- * existing delivery + 7 control-plane + 8 workflow). This module
6
- * is the single source of truth for the expected set so:
4
+ * The bundled plugin registers exactly 32 typed tools (16
5
+ * delivery + 4 control-plane + 12 ship). This module is the
6
+ * single source of truth for the expected set so:
7
7
  *
8
8
  * - the in-process plugin-load test asserts the contract at the
9
9
  * plugin boundary;
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  export const EXPECTED_OPENCODE_SHIP_TOOLS = Object.freeze([
20
- // 9 existing delivery tools
20
+ // 16 delivery tools
21
21
  "delivery_cleanup",
22
22
  "delivery_github_read",
23
23
  "delivery_inspect",
@@ -34,15 +34,23 @@ export const EXPECTED_OPENCODE_SHIP_TOOLS = Object.freeze([
34
34
  "delivery_sync",
35
35
  "delivery_verify",
36
36
  "delivery_worktree",
37
- // 7 control-plane + 8 workflow tools
37
+ // 12 ship tools
38
+ "ship_final_review",
38
39
  "ship_plan_approve",
39
40
  "ship_plan_start",
40
41
  "ship_plan_submit",
41
42
  "ship_resume",
42
43
  "ship_run_start",
44
+ "ship_skill_audit",
45
+ "ship_skill_discover",
46
+ "ship_skill_install",
47
+ "ship_skill_uninstall",
43
48
  "ship_status",
49
+ "ship_task_commit",
50
+ "ship_task_complete",
44
51
  "ship_task_report",
45
52
  "ship_task_review",
53
+ "ship_task_start",
46
54
  ]);
47
55
 
48
56
  /**
@@ -29,7 +29,7 @@ test("plugin: default export is a function", async () => {
29
29
  assert.equal(typeof mod.ShipPlugin, "function");
30
30
  });
31
31
 
32
- test("plugin: registers exactly 24 tools", async () => {
32
+ test("plugin: registers exactly 32 tools", async () => {
33
33
  const mod = await import(pluginPath);
34
34
  const fakeCtx = {
35
35
  worktree: process.cwd(),