@allocator-one/harness-cli 1.12.0 → 1.12.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.
package/README.md
CHANGED
|
@@ -106,7 +106,9 @@ Read the same mixed timeline shown in an issue's Activity section with
|
|
|
106
106
|
`harness activity IO-123`. It returns the newest 20 entries and points out
|
|
107
107
|
when older entries exist; pass `--all` to follow the opaque cursors through
|
|
108
108
|
the full history. `activity_list` exposes the same `id`, `limit`, and `all`
|
|
109
|
-
inputs to MCP clients.
|
|
109
|
+
inputs to MCP clients. Assignment, reassignment, and unassignment entries show
|
|
110
|
+
the actor and previous/new assignees when supplied by the server. Unavailable
|
|
111
|
+
identities use safe labels rather than raw user ids.
|
|
110
112
|
|
|
111
113
|
Typed issue relations are available without losing the concise blocking
|
|
112
114
|
workflow. `harness dep add|rm` and the `relation_add`/`relation_rm` MCP tools
|
|
@@ -270,6 +270,8 @@ function activityEntry(entry) {
|
|
|
270
270
|
return activityComment(entry);
|
|
271
271
|
case "state_event":
|
|
272
272
|
return activityStateEvent(entry);
|
|
273
|
+
case "assignee_event":
|
|
274
|
+
return activityAssigneeEvent(entry);
|
|
273
275
|
default:
|
|
274
276
|
throw new CommandError(`Unknown activity entry kind: ${clean(entry["kind"])}`);
|
|
275
277
|
}
|
|
@@ -311,6 +313,31 @@ function activityStateEvent(entry) {
|
|
|
311
313
|
return `[${clean(requiredString(entry["occurred_at"], "activity occurrence time"))}] ${description} \xB7 ${provenance}
|
|
312
314
|
`;
|
|
313
315
|
}
|
|
316
|
+
function activityAssigneeEvent(entry) {
|
|
317
|
+
const actor = activityActor(requiredRecord(entry["actor"], "activity actor"));
|
|
318
|
+
const provenance = activityProvenance(requiredRecord(entry["provenance"], "activity provenance"));
|
|
319
|
+
let description;
|
|
320
|
+
switch (entry["action"]) {
|
|
321
|
+
case "assigned":
|
|
322
|
+
description = `${actor} assigned the issue to ${assigneeName(entry["to_assignee"])}`;
|
|
323
|
+
break;
|
|
324
|
+
case "reassigned":
|
|
325
|
+
description = `${actor} reassigned the issue from ${assigneeName(entry["from_assignee"])} to ${assigneeName(entry["to_assignee"])}`;
|
|
326
|
+
break;
|
|
327
|
+
case "unassigned":
|
|
328
|
+
description = `${actor} unassigned the issue from ${assigneeName(entry["from_assignee"])}`;
|
|
329
|
+
break;
|
|
330
|
+
default:
|
|
331
|
+
throw new CommandError(`Unknown activity action: ${clean(entry["action"])}`);
|
|
332
|
+
}
|
|
333
|
+
return `[${clean(requiredString(entry["occurred_at"], "activity occurrence time"))}] ${description} - ${provenance}
|
|
334
|
+
`;
|
|
335
|
+
}
|
|
336
|
+
function assigneeName(value) {
|
|
337
|
+
const assignee = requiredRecord(value, "activity assignee");
|
|
338
|
+
if (assignee["kind"] === "unknown") return "Unknown assignee";
|
|
339
|
+
return activityActor(assignee);
|
|
340
|
+
}
|
|
314
341
|
function activityActor(actor) {
|
|
315
342
|
switch (actor["kind"]) {
|
|
316
343
|
case "user":
|
package/dist/cli.js
CHANGED
|
@@ -82,7 +82,7 @@ import {
|
|
|
82
82
|
version,
|
|
83
83
|
workflowStates,
|
|
84
84
|
writeCredentials
|
|
85
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-VOH6BBJD.js";
|
|
86
86
|
|
|
87
87
|
// src/cli.ts
|
|
88
88
|
import { createInterface as createInterface2 } from "readline";
|
|
@@ -1617,7 +1617,7 @@ program.command("show").description("full issue detail; downloads attached image
|
|
|
1617
1617
|
});
|
|
1618
1618
|
}
|
|
1619
1619
|
);
|
|
1620
|
-
program.command("activity").description("mixed issue activity: comments, creation, and
|
|
1620
|
+
program.command("activity").description("mixed issue activity: comments, creation, state and assignee changes").argument("[id]").option(
|
|
1621
1621
|
"--limit <n>",
|
|
1622
1622
|
`entries per page (default 20, max ${ACTIVITY_MAX_LIMIT})`,
|
|
1623
1623
|
activityLimit
|
|
@@ -2093,7 +2093,7 @@ program.command("upload").description("upload an image (25 MB) or H.264 MP4 vide
|
|
|
2093
2093
|
});
|
|
2094
2094
|
});
|
|
2095
2095
|
program.command("mcp").description("run the MCP server over stdio (for agents)").action(async () => {
|
|
2096
|
-
const { startMcpServer } = await import("./server-
|
|
2096
|
+
const { startMcpServer } = await import("./server-FNNMISOZ.js");
|
|
2097
2097
|
await startMcpServer();
|
|
2098
2098
|
});
|
|
2099
2099
|
var keys = program.command("keys").description("the org's provider API keys, handed to tooling without printing them").enablePositionalOptions();
|
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
upload,
|
|
62
62
|
userList,
|
|
63
63
|
workflowStates
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-VOH6BBJD.js";
|
|
65
65
|
|
|
66
66
|
// src/mcp/server.ts
|
|
67
67
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -165,7 +165,7 @@ var TOOLS = [
|
|
|
165
165
|
},
|
|
166
166
|
{
|
|
167
167
|
name: "activity_list",
|
|
168
|
-
description: "Mixed issue activity: comments, creation, and
|
|
168
|
+
description: "Mixed issue activity: comments, creation, state and assignee changes. Returns the newest page unless all=true.",
|
|
169
169
|
readOnly: true,
|
|
170
170
|
shape: {
|
|
171
171
|
id: identifier,
|
package/package.json
CHANGED
package/spec/openapi.json
CHANGED
|
@@ -1297,7 +1297,7 @@
|
|
|
1297
1297
|
"get": {
|
|
1298
1298
|
"callbacks": {},
|
|
1299
1299
|
"deprecated": false,
|
|
1300
|
-
"description": "Requires the `harness:read` scope. The newest mixed page of comments
|
|
1300
|
+
"description": "Requires the `harness:read` scope. The newest mixed page of comments, issue-state events, and assignee changes, returned oldest-first. `has_more` means older entries exist. Pass the opaque `next_cursor` back as `before`; cursors are bound to the issue and viewer and expire after 24 hours.",
|
|
1301
1301
|
"parameters": [
|
|
1302
1302
|
{
|
|
1303
1303
|
"description": "Issue identifier, e.g. ALL-4901 or CLI-12 (issues minted before team-prefixed numbering carry IO-)",
|
|
@@ -1594,6 +1594,131 @@
|
|
|
1594
1594
|
"to_state"
|
|
1595
1595
|
],
|
|
1596
1596
|
"type": "object"
|
|
1597
|
+
},
|
|
1598
|
+
{
|
|
1599
|
+
"additionalProperties": false,
|
|
1600
|
+
"properties": {
|
|
1601
|
+
"action": {
|
|
1602
|
+
"enum": [
|
|
1603
|
+
"assigned",
|
|
1604
|
+
"reassigned",
|
|
1605
|
+
"unassigned"
|
|
1606
|
+
],
|
|
1607
|
+
"type": "string"
|
|
1608
|
+
},
|
|
1609
|
+
"actor": {
|
|
1610
|
+
"properties": {
|
|
1611
|
+
"kind": {
|
|
1612
|
+
"enum": [
|
|
1613
|
+
"system",
|
|
1614
|
+
"user",
|
|
1615
|
+
"deleted_user",
|
|
1616
|
+
"unknown"
|
|
1617
|
+
],
|
|
1618
|
+
"type": "string"
|
|
1619
|
+
},
|
|
1620
|
+
"name": {
|
|
1621
|
+
"nullable": true,
|
|
1622
|
+
"type": "string"
|
|
1623
|
+
}
|
|
1624
|
+
},
|
|
1625
|
+
"required": [
|
|
1626
|
+
"kind",
|
|
1627
|
+
"name"
|
|
1628
|
+
],
|
|
1629
|
+
"type": "object"
|
|
1630
|
+
},
|
|
1631
|
+
"from_assignee": {
|
|
1632
|
+
"nullable": true,
|
|
1633
|
+
"properties": {
|
|
1634
|
+
"kind": {
|
|
1635
|
+
"enum": [
|
|
1636
|
+
"system",
|
|
1637
|
+
"user",
|
|
1638
|
+
"deleted_user",
|
|
1639
|
+
"unknown"
|
|
1640
|
+
],
|
|
1641
|
+
"type": "string"
|
|
1642
|
+
},
|
|
1643
|
+
"name": {
|
|
1644
|
+
"nullable": true,
|
|
1645
|
+
"type": "string"
|
|
1646
|
+
}
|
|
1647
|
+
},
|
|
1648
|
+
"required": [
|
|
1649
|
+
"kind",
|
|
1650
|
+
"name"
|
|
1651
|
+
],
|
|
1652
|
+
"type": "object"
|
|
1653
|
+
},
|
|
1654
|
+
"id": {
|
|
1655
|
+
"type": "string"
|
|
1656
|
+
},
|
|
1657
|
+
"kind": {
|
|
1658
|
+
"enum": [
|
|
1659
|
+
"assignee_event"
|
|
1660
|
+
],
|
|
1661
|
+
"type": "string"
|
|
1662
|
+
},
|
|
1663
|
+
"occurred_at": {
|
|
1664
|
+
"format": "date-time",
|
|
1665
|
+
"type": "string"
|
|
1666
|
+
},
|
|
1667
|
+
"provenance": {
|
|
1668
|
+
"properties": {
|
|
1669
|
+
"kind": {
|
|
1670
|
+
"enum": [
|
|
1671
|
+
"live",
|
|
1672
|
+
"import",
|
|
1673
|
+
"backfill"
|
|
1674
|
+
],
|
|
1675
|
+
"type": "string"
|
|
1676
|
+
},
|
|
1677
|
+
"witnessed": {
|
|
1678
|
+
"type": "boolean"
|
|
1679
|
+
}
|
|
1680
|
+
},
|
|
1681
|
+
"required": [
|
|
1682
|
+
"kind",
|
|
1683
|
+
"witnessed"
|
|
1684
|
+
],
|
|
1685
|
+
"type": "object"
|
|
1686
|
+
},
|
|
1687
|
+
"to_assignee": {
|
|
1688
|
+
"nullable": true,
|
|
1689
|
+
"properties": {
|
|
1690
|
+
"kind": {
|
|
1691
|
+
"enum": [
|
|
1692
|
+
"system",
|
|
1693
|
+
"user",
|
|
1694
|
+
"deleted_user",
|
|
1695
|
+
"unknown"
|
|
1696
|
+
],
|
|
1697
|
+
"type": "string"
|
|
1698
|
+
},
|
|
1699
|
+
"name": {
|
|
1700
|
+
"nullable": true,
|
|
1701
|
+
"type": "string"
|
|
1702
|
+
}
|
|
1703
|
+
},
|
|
1704
|
+
"required": [
|
|
1705
|
+
"kind",
|
|
1706
|
+
"name"
|
|
1707
|
+
],
|
|
1708
|
+
"type": "object"
|
|
1709
|
+
}
|
|
1710
|
+
},
|
|
1711
|
+
"required": [
|
|
1712
|
+
"id",
|
|
1713
|
+
"kind",
|
|
1714
|
+
"occurred_at",
|
|
1715
|
+
"action",
|
|
1716
|
+
"actor",
|
|
1717
|
+
"provenance",
|
|
1718
|
+
"from_assignee",
|
|
1719
|
+
"to_assignee"
|
|
1720
|
+
],
|
|
1721
|
+
"type": "object"
|
|
1597
1722
|
}
|
|
1598
1723
|
]
|
|
1599
1724
|
},
|