huly-mcp-selfhost 3.1.0 → 3.2.0
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/.env.example +10 -0
- package/README.md +38 -12
- package/dist/connection.d.ts +8 -0
- package/dist/connection.js +13 -1
- package/dist/connection.js.map +1 -1
- package/dist/guides/costs.md +48 -0
- package/dist/guides/features.md +49 -0
- package/dist/guides/onboarding.md +56 -0
- package/dist/guides/workflow.md +57 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -1
- package/dist/resources.js +5 -5
- package/dist/resources.js.map +1 -1
- package/dist/schemas.d.ts +23 -0
- package/dist/schemas.js +29 -6
- package/dist/schemas.js.map +1 -1
- package/dist/server.d.ts +13 -0
- package/dist/server.js +57 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/agent.d.ts +35 -0
- package/dist/tools/agent.js +134 -11
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/documents.js +2 -1
- package/dist/tools/documents.js.map +1 -1
- package/dist/tools/issues.d.ts +3 -0
- package/dist/tools/issues.js +35 -20
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/organizations.js +2 -1
- package/dist/tools/organizations.js.map +1 -1
- package/dist/utils/content.d.ts +5 -0
- package/dist/utils/content.js +34 -2
- package/dist/utils/content.js.map +1 -1
- package/dist/utils/meeting.d.ts +13 -0
- package/dist/utils/meeting.js +118 -0
- package/dist/utils/meeting.js.map +1 -0
- package/dist/utils/redact.d.ts +3 -0
- package/dist/utils/redact.js +26 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/spec.d.ts +10 -0
- package/dist/utils/spec.js +90 -0
- package/dist/utils/spec.js.map +1 -0
- package/dist/utils/storage.js +7 -3
- package/dist/utils/storage.js.map +1 -1
- package/package.json +1 -1
package/.env.example
CHANGED
|
@@ -17,6 +17,16 @@ HULY_PASSWORD=your-password
|
|
|
17
17
|
# HULY_ACCOUNTS_URL=https://account.huly.app
|
|
18
18
|
# Front service (document/description content + file uploads). Not used for discovery.
|
|
19
19
|
# HULY_FRONT_URL=https://your-huly-instance.com
|
|
20
|
+
# Running next to Huly (same Docker network)? Internal addresses keep traffic on the
|
|
21
|
+
# machine, e.g. with nginx reachable as "huly". (An internal HULY_FRONT_URL works too,
|
|
22
|
+
# but invite links would then show the internal address.)
|
|
23
|
+
# HULY_ACCOUNTS_URL=http://huly/_accounts
|
|
24
|
+
# HULY_TRANSACTOR_URL=ws://huly/_transactor
|
|
25
|
+
|
|
26
|
+
# ─── Docker image only ───────────────────────────────────────────────────────
|
|
27
|
+
# Host names clients use to reach the container (reverse proxy / public name),
|
|
28
|
+
# comma-separated. Without it only localhost is accepted (421 "Invalid Host header").
|
|
29
|
+
# MCP_ALLOWED_HOSTS=huly-mcp.example.com,huly-mcp.example.com:443
|
|
20
30
|
|
|
21
31
|
# ─── Single workspace (optional) ─────────────────────────────────────────────
|
|
22
32
|
# Pin this server to one workspace (slug, name or id). Tools then take no
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ This is a fork of [varaprasadreddy9676/huly-mcp](https://github.com/varaprasadre
|
|
|
33
33
|
|
|
34
34
|
---
|
|
35
35
|
|
|
36
|
-
## Tools (
|
|
36
|
+
## Tools (224 total, grouped in toolsets)
|
|
37
37
|
|
|
38
38
|
All tools except `list_workspaces` take a `workspace` argument — required for every change, optional for reads when only one workspace is available.
|
|
39
39
|
|
|
@@ -50,7 +50,7 @@ HULY_TOOLSETS=tracker,documents,planner # just these ('core' = list_workspaces i
|
|
|
50
50
|
|
|
51
51
|
| Toolset | Default | Tools | Contents |
|
|
52
52
|
|---------|:-:|--:|----------|
|
|
53
|
-
| `agent` | ✓ |
|
|
53
|
+
| `agent` | ✓ | 14 | agent workflow: my day at a glance, standup, project report, release notes, issue context in one call, start/finish work, plan → issue tree, spec document → issues, meeting notes → issues, changes since, claims, repo → project — plus [resources and prompts](#agent-workflow) |
|
|
54
54
|
| `tracker` | ✓ | 37 | projects, issues, comments, time, labels, relations, milestones, components, statuses, attachments, search |
|
|
55
55
|
| `documents` | ✓ | 8 | teamspaces and documents (tree, move, rename) |
|
|
56
56
|
| `chat` | ✓ | 12 | channels, DMs, threads, edit/delete, reactions, pins |
|
|
@@ -82,12 +82,12 @@ HULY_TOOLSETS=tracker,documents,planner # just these ('core' = list_workspaces i
|
|
|
82
82
|
|
|
83
83
|
Context cost of `tools/list` (≈3.5 chars/token):
|
|
84
84
|
|
|
85
|
-
| | default (
|
|
85
|
+
| | default (96 tools) | `all` (224 tools) |
|
|
86
86
|
|---|--:|--:|
|
|
87
|
-
| several workspaces | ~
|
|
88
|
-
| pinned with `HULY_WORKSPACE` | ~
|
|
87
|
+
| several workspaces | ~36.5k chars ≈ **10.4k tokens** | ~81.6k chars ≈ **23.3k tokens** |
|
|
88
|
+
| pinned with `HULY_WORKSPACE` | ~33k chars ≈ **9.4k tokens** | ~73.3k chars ≈ **20.9k tokens** |
|
|
89
89
|
|
|
90
|
-
For comparison, 2.2.0 needed ≈12.8k tokens for 64 tools. **Using one workspace? Set `HULY_WORKSPACE`** — the `workspace` argument then disappears from every tool (−
|
|
90
|
+
For comparison, 2.2.0 needed ≈12.8k tokens for 64 tools. **Using one workspace? Set `HULY_WORKSPACE`** — the `workspace` argument then disappears from every tool (−10%). **Claude Code** loads MCP tools on demand, so there even `HULY_TOOLSETS=all` costs little up front.
|
|
91
91
|
|
|
92
92
|
### Agent workflow
|
|
93
93
|
|
|
@@ -103,6 +103,8 @@ Tools, resources and prompts for AI agents working on Huly issues (toolset `agen
|
|
|
103
103
|
| `start_work` | Status → In Progress, assign to me, optionally claim — returns the full context |
|
|
104
104
|
| `finish_work` | Work summary as comment, PR (`#12`, URL or Huly id) linked as sub-issue, status → Review in progress, claim released. Validates the PR before changing anything |
|
|
105
105
|
| `create_issue_tree` | Plan → epic + sub-issues with priorities, components, milestones, assignees, labels and blockers (`"#2"` = second child). Same-title issues are reused, dry run by default |
|
|
106
|
+
| `issues_from_document` | Spec → issues: the open checklist items of a Huly document (without a checklist: its sections) become sub-issues of an epic, checked items are skipped, the document is linked to the epic. Dry run by default; one call instead of reading the document and repeating every task |
|
|
107
|
+
| `issues_from_meeting` | Meeting notes → issues: open checkboxes, lines starting with `TODO:`/`Action:`/`Aufgabe:` and list items under a heading like "Action items" or "Next steps" become issues. `@Name` (or a Huly mention) becomes the assignee, a date (`2026-11-10`, `10.11.2026`, "due …"/"bis …") the due date. Unknown people are flagged and left unassigned; same-title issues are skipped; each new issue is linked to the document. Dry run by default |
|
|
106
108
|
| `changes_since` | Issues/PRs changed since `24h`, `7d` or an ISO time — which fields changed, new comments, by whom |
|
|
107
109
|
| `find_project_for_repo` | Workspace + project linked to a GitHub repo (`owner/name`, URL or git remote) via Huly's GitHub integration |
|
|
108
110
|
| `claim_issue` / `release_issue` | Lease an issue to an agent (label `agent:working` + comment marker) so parallel agents skip it; expires after `minutes` |
|
|
@@ -353,7 +355,7 @@ Or with Compose — copy `.env.example` to `.env`, fill in your credentials (no
|
|
|
353
355
|
docker compose up -d
|
|
354
356
|
```
|
|
355
357
|
|
|
356
|
-
The container wraps the server with [`mcp-proxy`](https://github.com/sparfenyuk/mcp-proxy) to expose it over HTTP/SSE at `:8000/sse`, since standard MCP stdio transport can't be reached over a network directly. See [`Dockerfile`](Dockerfile) / [`docker-compose.yml`](docker-compose.yml).
|
|
358
|
+
The container wraps the server with [`mcp-proxy`](https://github.com/sparfenyuk/mcp-proxy) to expose it over HTTP/SSE at `:8000/sse`, since standard MCP stdio transport can't be reached over a network directly. **Behind a reverse proxy or on a public hostname, set `MCP_ALLOWED_HOSTS`** to the host name(s) clients use, e.g. `MCP_ALLOWED_HOSTS=huly-mcp.example.com`. Otherwise mcp-proxy only accepts `localhost` and answers `421 Invalid Host header`. See [`Dockerfile`](Dockerfile) / [`docker-compose.yml`](docker-compose.yml).
|
|
357
359
|
|
|
358
360
|
---
|
|
359
361
|
|
|
@@ -383,6 +385,7 @@ A single Huly account can belong to several workspaces — e.g. a personal one a
|
|
|
383
385
|
| `HULY_TOKEN` | one auth option | Account token for SSO accounts (Google/GitHub) — get it with `npm run setup` |
|
|
384
386
|
| `HULY_ACCOUNTS_URL` | self-hosted only | Account service — login and workspace discovery. Default `https://account.huly.app`. Self-hosted: your instance's accounts URL, e.g. `https://huly.example.com/_accounts` |
|
|
385
387
|
| `HULY_FRONT_URL` | self-hosted (optional on Cloud) | Front service — document/description content and file uploads. Not involved in login or workspace discovery. Self-hosted: e.g. `https://huly.example.com` |
|
|
388
|
+
| `HULY_TRANSACTOR_URL` | no | Self-hosted, server next to Huly: connect to the transactor directly instead of the public address the account service returns, e.g. `ws://huly/_transactor` (via nginx) or `ws://transactor:3333`. Saves the detour through your uplink/tunnel. `HULY_ACCOUNTS_URL` can be internal too (`http://huly/_accounts`); an internal `HULY_FRONT_URL` also works but then invite links show the internal address |
|
|
386
389
|
| `HULY_WORKSPACE` | no | Pin the server to one workspace; tools then take no `workspace` argument (fewer tokens) |
|
|
387
390
|
| `HULY_DYNAMIC_TOOLSETS` | no | `1`: start with `HULY_TOOLSETS` and load more on demand via `enable_toolsets` (see [Toolsets](#toolsets)) |
|
|
388
391
|
| `HULY_TOOLSETS` | no | Comma-separated toolsets to enable, or `all` (see [Toolsets](#toolsets)). Default: `agent,tracker,documents,chat,contacts,inbox,activity,planner,generic` |
|
|
@@ -410,14 +413,16 @@ Claude Code then asks for your Huly settings (e-mail + password or token, and fo
|
|
|
410
413
|
|
|
411
414
|
| Part | What it does |
|
|
412
415
|
|------|--------------|
|
|
413
|
-
| MCP server | `huly-mcp-selfhost` via `npx`, configured from the plugin settings (toolsets and writable projects included) |
|
|
416
|
+
| MCP server | `huly-mcp-selfhost` via `npx`, configured from the plugin settings (toolsets, on-demand loading, pinned workspace and writable projects included) |
|
|
414
417
|
| Skill `huly-workflow` | When and how to use Huly while coding: find the project for the repo, duplicate check before new issues, component + milestone, status flow, PR → issue links, epics for plans |
|
|
418
|
+
| Skill `huly-efficient` | Cheapest call for each question and change, with measured output sizes: one-call overviews, filters instead of full lists, one write instead of create-then-update, no pre-checks the tools already do |
|
|
415
419
|
| Hook on session start | Reports the GitHub repo and branch; a branch like `proj-12-login` points Claude to issue `PROJ-12` (no network, no credentials) |
|
|
416
420
|
| Hook after `gh pr create` / `gh pr merge` | Reminds Claude to link the new PR to its issue (`finish_work`) or to check the status after a merge |
|
|
417
421
|
| `/huly:start [PROJ-12]` | Pick up an issue (from the argument or the branch), load the context, plan |
|
|
418
422
|
| `/huly:finish [PROJ-12] [PR]` | Honest summary, PR link, status to review |
|
|
419
423
|
| `/huly:plan <goal>` | Plan → epic + sub-issues (dry run first) |
|
|
420
|
-
| `/huly:
|
|
424
|
+
| `/huly:day`, `/huly:standup [since]`, `/huly:triage` | My day, stand-up, inbox triage — one call each (`my_day`, `standup`, `triage_inbox`) |
|
|
425
|
+
| `/huly:report <PROJECT> [7d]` | Project status: progress, milestones, blockers (`project_report`) |
|
|
421
426
|
|
|
422
427
|
Without the plugin, the same server works in Claude Code as a plain MCP server (see below); the MCP prompts `start`, `finish`, `plan`, `triage`, `standup` are available there too.
|
|
423
428
|
|
|
@@ -851,9 +856,30 @@ Secrets:
|
|
|
851
856
|
|
|
852
857
|
## Changelog
|
|
853
858
|
|
|
854
|
-
###
|
|
855
|
-
|
|
856
|
-
|
|
859
|
+
### 3.2.0 — 2026-11-11
|
|
860
|
+
|
|
861
|
+
- **New: `issues_from_document`** — spec → issues in one call: open checklist items of a Huly document (or, without a checklist, its sections) become sub-issues of an epic; checked items are skipped; the document is linked to the epic. Dry run by default.
|
|
862
|
+
- **New: `issues_from_meeting`** — meeting notes → issues in one call: action items (open checkboxes, `TODO:`/`Action:` lines, lists under "Action items"/"Next steps") with `@assignee` and due date taken from the line; dry run first, each new issue linked to the document.
|
|
863
|
+
- **`create_issue` takes `assignee`, `componentLabel` and `milestoneLabel`**, so a new issue no longer needs a second `update_issue` call. An unknown `statusName` is now an error (it used to fall back to the first status). Everything is checked before anything is written.
|
|
864
|
+
- **Unknown tool parameters are rejected instead of silently dropped.** Before, `update_issue {status: "Done"}` answered "No changes made". Now the call fails with the list of valid parameters and nothing is done. Common mix-ups are mapped automatically: `status`→`statusName`, `project`/`projectId`→`projectIdentifier`, `issue`/`issueId`/`id`→`identifier`, `component`→`componentLabel`, `milestone`→`milestoneLabel`.
|
|
865
|
+
- **`get_issue` is shorter:** empty fields (no milestone, 0 comments, …) are left out and the fields share one line.
|
|
866
|
+
- **Smaller tool list:** the `workspace` parameter no longer repeats its description in every tool (the server instructions explain it once). Default set 38.7k → 35.2k characters, all toolsets 88.8k → 80.3k.
|
|
867
|
+
- **New `HULY_TRANSACTOR_URL`:** a server running next to Huly (same Docker network) can reach the transactor internally, e.g. `ws://huly/_transactor`, instead of the public address — no detour through the uplink or a tunnel.
|
|
868
|
+
- **Claude Code plugin: new skill `huly-efficient`** — which Huly call answers which question with the least output (sizes measured on a real project), which writes need only one call, and which checks the tools already do. The `huly-workflow` skill points to it.
|
|
869
|
+
- **Claude Code plugin:** `/huly:standup` and `/huly:triage` (and the MCP prompts) now use the one-call tools `standup` and `triage_inbox`; new commands `/huly:day` (`my_day`) and `/huly:report` (`project_report`); new settings for a pinned workspace (`HULY_WORKSPACE`) and on-demand toolsets (`HULY_DYNAMIC_TOOLSETS`). The skill points to the overview tools and to `create_issue` with component/milestone.
|
|
870
|
+
- **Fixed: Huly client log lines on stdout.** `Client: onConnect 1` landed in the JSON-RPC stream; mcp-proxy logged "Failed to parse JSONRPC message". Such logs now go to stderr.
|
|
871
|
+
- **Fixed: session tokens in logs.** Huly's client logs its websocket URL including the workspace token (`client websocket error: … /_transactor/<token>`), which ended up in `docker compose logs`. Tokens in log output are now masked as `***`.
|
|
872
|
+
- **Fixed: `create_issue_tree` (and `issues_from_document`) left reused issues outside the epic.** A same-title issue that is reused now moves under the epic when it has no parent; one under another parent stays there, and the plan and result say so.
|
|
873
|
+
- **Fixed: blob requests without a timeout.** Reading document/description content and uploads could hang a tool call when the front service stalled. Reads now stop after 30 s, uploads after 2 min, with a clear error naming `HULY_FRONT_URL`.
|
|
874
|
+
- `create_issue_tree` passes component, milestone and assignee straight to `create_issue`, so a wrong name fails before the issue exists (before: the issue was created, then the update failed).
|
|
875
|
+
- Unknown-parameter error of tools without own parameters (e.g. `list_issue_statuses`) said "Valid: ."; it now says the tool takes no parameters besides `workspace`.
|
|
876
|
+
- README: context-cost table re-measured (the pinned saving is now ~10%, not 20%, since the `workspace` description was already shortened).
|
|
877
|
+
- CI: CodeQL Action v4; runs on `main` are no longer cancelled by the next push.
|
|
878
|
+
|
|
879
|
+
### 3.1.1 — 2026-11-04
|
|
880
|
+
|
|
881
|
+
- **Fixed: Docker image behind a reverse proxy.** The `mcp-proxy` update in 3.1.0 made the server reject every Host name except `localhost` (`421 Invalid Host header`). New variable `MCP_ALLOWED_HOSTS` (comma-separated) lists the host names clients use, e.g. `MCP_ALLOWED_HOSTS=huly-mcp.example.com`. Without it the container logs a warning. CI now tests allowed and rejected Host headers.
|
|
882
|
+
- Release workflow: when `npm publish` fails, the OIDC/auth lines of npm's debug log are shown (3.1.0 had to be published to npm by hand).
|
|
857
883
|
|
|
858
884
|
### 3.1.0 — 2026-11-04
|
|
859
885
|
|
package/dist/connection.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface ConnectionManagerOptions {
|
|
|
27
27
|
token?: string;
|
|
28
28
|
/** Legacy HULY_WORKSPACE: restricts this server to that single workspace. */
|
|
29
29
|
restrictTo?: string;
|
|
30
|
+
/** HULY_TRANSACTOR_URL: use this transactor instead of the one the account service names (e.g. an internal address). */
|
|
31
|
+
transactorUrl?: string;
|
|
30
32
|
createAccountClient?: (accountsUrl: string, token?: string) => AccountClient;
|
|
31
33
|
openConnection?: (endpoint: string, token: string, socialId: PersonId) => Promise<OpenConnection>;
|
|
32
34
|
}
|
|
@@ -55,6 +57,12 @@ export declare class WorkspaceConnectionManager {
|
|
|
55
57
|
private discover;
|
|
56
58
|
private connect;
|
|
57
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The account service answers with the public transactor address (e.g. wss://huly.example.com/_transactor).
|
|
62
|
+
* Next to Huly — same Docker network — that detour goes out through the uplink and a tunnel and back in.
|
|
63
|
+
* HULY_TRANSACTOR_URL replaces it, e.g. ws://huly/_transactor or ws://transactor:3333.
|
|
64
|
+
*/
|
|
65
|
+
export declare function transactorEndpoint(endpoint: string, override: string | undefined): string;
|
|
58
66
|
export declare function getConnectionManager(): WorkspaceConnectionManager;
|
|
59
67
|
/** Replace the process-wide manager (tests). */
|
|
60
68
|
export declare function setConnectionManager(next: WorkspaceConnectionManager | null): void;
|
package/dist/connection.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkspaceConnectionManager = void 0;
|
|
4
|
+
exports.transactorEndpoint = transactorEndpoint;
|
|
4
5
|
exports.getConnectionManager = getConnectionManager;
|
|
5
6
|
exports.setConnectionManager = setConnectionManager;
|
|
6
7
|
exports.listWorkspaces = listWorkspaces;
|
|
@@ -206,6 +207,7 @@ class WorkspaceConnectionManager {
|
|
|
206
207
|
wsToken = wsInfo.token;
|
|
207
208
|
workspaceUuid = String(wsInfo.workspace ?? ws.uuid);
|
|
208
209
|
}
|
|
210
|
+
endpoint = transactorEndpoint(endpoint, this.opts.transactorUrl);
|
|
209
211
|
const { client, close } = await this.openConnection(endpoint, wsToken, session.socialId);
|
|
210
212
|
return {
|
|
211
213
|
workspace: ws,
|
|
@@ -218,6 +220,15 @@ class WorkspaceConnectionManager {
|
|
|
218
220
|
}
|
|
219
221
|
}
|
|
220
222
|
exports.WorkspaceConnectionManager = WorkspaceConnectionManager;
|
|
223
|
+
/**
|
|
224
|
+
* The account service answers with the public transactor address (e.g. wss://huly.example.com/_transactor).
|
|
225
|
+
* Next to Huly — same Docker network — that detour goes out through the uplink and a tunnel and back in.
|
|
226
|
+
* HULY_TRANSACTOR_URL replaces it, e.g. ws://huly/_transactor or ws://transactor:3333.
|
|
227
|
+
*/
|
|
228
|
+
function transactorEndpoint(endpoint, override) {
|
|
229
|
+
const o = override?.trim();
|
|
230
|
+
return o != null && o !== '' ? o.replace(/\/+$/, '') : endpoint;
|
|
231
|
+
}
|
|
221
232
|
// ── Process-wide manager (configured from env) ──────────────────────────────
|
|
222
233
|
let manager = null;
|
|
223
234
|
function getConnectionManager() {
|
|
@@ -227,7 +238,8 @@ function getConnectionManager() {
|
|
|
227
238
|
email: process.env.HULY_EMAIL,
|
|
228
239
|
password: process.env.HULY_PASSWORD,
|
|
229
240
|
token: process.env.HULY_TOKEN,
|
|
230
|
-
restrictTo: process.env.HULY_WORKSPACE
|
|
241
|
+
restrictTo: process.env.HULY_WORKSPACE,
|
|
242
|
+
transactorUrl: process.env.HULY_TRANSACTOR_URL
|
|
231
243
|
});
|
|
232
244
|
}
|
|
233
245
|
return manager;
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Huly calls by cost
|
|
2
|
+
|
|
3
|
+
Every Huly call costs a round trip and its output stays in context. Aim for **one call per question** and **one call per change**. Sizes below are measured on a real project (≈50 issues); 1k chars ≈ 300 tokens.
|
|
4
|
+
|
|
5
|
+
## Reading: question → call
|
|
6
|
+
|
|
7
|
+
| Question | Call | Size | Instead of |
|
|
8
|
+
|---|---|--:|---|
|
|
9
|
+
| What's on today for me? | `my_day` | ~1.2k | calendar + to-dos + my issues + inbox |
|
|
10
|
+
| Standup | `standup` | small | `changes_since` + `list_issues` per project |
|
|
11
|
+
| How is project X doing? | `project_report` | ~2.7k | `list_issues status=all` (~4k for 50) + milestones + PRs |
|
|
12
|
+
| Everything about PROJ-12 before working on it | `get_issue_context` | ~1.3k | `get_issue` + `list_sub_issues` + `list_comments` + relations (4+ calls) |
|
|
13
|
+
| Status/assignee of PROJ-12 | `get_issue` | ~0.4k | `get_issue_context` |
|
|
14
|
+
| What changed? | `changes_since` with `projectIdentifiers` and a short `since` | — | whole workspace for 7d: ~8k |
|
|
15
|
+
| What needs my attention? | `triage_inbox` with a small `limit` | ~4k at 10 | `list_notifications` + `get_issue` per item |
|
|
16
|
+
| What's in release v1.2? | `release_notes` | ~2k | `list_issues milestoneLabel=…` + reading every issue |
|
|
17
|
+
| Find issues about X | `search_issues` | ~2k | `list_issues status=all` and scanning |
|
|
18
|
+
| Find anything (docs, chat, issues) | `search` | ~2.5k | several list calls |
|
|
19
|
+
|
|
20
|
+
**Narrow lists with filters, not by reading them:** `list_issues` takes `status` (`open` default, `all`, or a name), `assignee` (`null` = unassigned), `milestoneLabel`, `componentLabel`, `labelName`, `parentIdentifier` (`null` = top level) and `limit`.
|
|
21
|
+
|
|
22
|
+
**Avoid** `query_documents` / generic tools when a specific tool exists: one issue there is ~1.8k raw fields vs ~0.4k from `get_issue`. Use them only for classes without a tool.
|
|
23
|
+
|
|
24
|
+
## Writing: one call per change
|
|
25
|
+
|
|
26
|
+
- **New issue with everything:** `create_issue` takes `statusName`, `priority`, `assignee`, `componentLabel`, `milestoneLabel`, `dueDate` — no follow-up `update_issue`.
|
|
27
|
+
- **Many issues:** `create_issue_tree` (epic + children + blockers), dry run first.
|
|
28
|
+
- **From a document:** `issues_from_document` (spec → epic + sub-issues) or `issues_from_meeting` (action items with `@assignee` and dates). Do not read the document and retype the tasks.
|
|
29
|
+
- **Same change on many issues:** `bulk_update_issues` instead of N × `update_issue`.
|
|
30
|
+
- **Picking up / handing back work:** `start_work` (status + assign + context) and `finish_work` (comment + PR link + status) instead of 3–4 separate calls.
|
|
31
|
+
|
|
32
|
+
## Don't spend calls on checks the tools already do
|
|
33
|
+
|
|
34
|
+
- Names (status, component, milestone, person) are validated **before anything is written**; a wrong name returns an error that says what is wrong. Try with the name first — don't list statuses or components "just to be sure".
|
|
35
|
+
- Unknown or misspelled parameters are rejected with the list of valid ones and nothing is done; common aliases (`status`, `project`, `issueId`, `component`, `milestone`) are mapped automatically.
|
|
36
|
+
- Write tools return what changed (`changed: status, assignee`). Don't re-read the issue to confirm.
|
|
37
|
+
- Dry runs (`create_issue_tree`, `issues_from_*`, generic writes) show the full plan — show it to the user, then run once with `dryRun: false`.
|
|
38
|
+
|
|
39
|
+
## Round trips
|
|
40
|
+
|
|
41
|
+
- Independent reads (e.g. `get_issue_context` for two issues) go in **one turn in parallel**.
|
|
42
|
+
- Pass `workspace` explicitly when there are several; a pinned server (`HULY_WORKSPACE`) needs none.
|
|
43
|
+
- Issue ids (`PROJ-12`) and names work everywhere — don't look up internal `_id`s first.
|
|
44
|
+
|
|
45
|
+
## Setup that saves tokens before the first call
|
|
46
|
+
|
|
47
|
+
- `HULY_WORKSPACE` pins one workspace: the `workspace` argument disappears from every tool (~10% smaller tool list).
|
|
48
|
+
- `HULY_TOOLSETS` with only what you use (default set ≈ 36k chars; `all` ≈ 82k). With `HULY_DYNAMIC_TOOLSETS=1` more toolsets load on demand via `enable_toolsets`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# All of Huly for a software project
|
|
2
|
+
|
|
3
|
+
How to put a project **completely** into Huly — not just issues. For each feature: what it is for in a repo, the tools, and when to propose it. Propose, then write; check what exists first (`list_*`); never create projects yourself.
|
|
4
|
+
|
|
5
|
+
## Toolsets: load what the project uses
|
|
6
|
+
|
|
7
|
+
Many features below are **not in the default toolset**. A tool that is missing is in a disabled toolset:
|
|
8
|
+
|
|
9
|
+
- **On-demand server** (`HULY_DYNAMIC_TOOLSETS=1`): call `enable_toolsets` with the names, e.g. `["testing", "templates"]`.
|
|
10
|
+
- **Otherwise**: tell the user which toolsets to add to `HULY_TOOLSETS` (Claude Code plugin: `/plugin` → huly → configure → Toolsets), e.g. `agent,tracker,documents,chat,inbox,planner,testing,templates,tracker-admin`. Takes effect after reconnecting the server (`/mcp`).
|
|
11
|
+
|
|
12
|
+
Default: `agent, tracker, documents, chat, contacts, inbox, activity, planner, generic`. Extra: `tracker-admin` (label categories, statuses, project settings), `templates`, `testing`, `github`, `drive`, `calendar`, `collaboration` (doc comments, sharing), `fields` (custom fields), `cards`, `products`.
|
|
13
|
+
|
|
14
|
+
## Map: what goes where
|
|
15
|
+
|
|
16
|
+
| In the repo / team | In Huly | Tools (toolset) | Propose when |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| Modules, packages, targets | **Components** — description names the paths | `create_component`, `update_component` (tracker) | onboarding; a new top-level folder appears |
|
|
19
|
+
| Releases, tags, deadlines | **Milestones** with target date and status | `create_milestone`, `update_milestone`, `release_notes` (tracker, agent) | onboarding; a tag is pushed → set it Completed, create the next |
|
|
20
|
+
| Phases, features, big refactors | **Epics** = issue + sub-issues, order via blocked-by | `create_issue_tree`, `set_parent`, `add_blocked_by` (agent, tracker) | a plan has more than ~3 steps |
|
|
21
|
+
| Kind of work (bug, feature, tech debt, docs) | **Labels**, grouped in label **categories** | `create_label`, `add_label`, `create_label_category`, `set_label_category` (tracker, tracker-admin) | onboarding, when the team distinguishes work types; filter with `list_issues labelName` |
|
|
22
|
+
| Workflow | **Status set**, per project type | `list_issue_statuses` (tracker), `create_issue_status` (tracker-admin) | onboarding |
|
|
23
|
+
| Recurring work: release checklist, bug report, onboarding a dev | **Issue templates** with sub-issues | `create_issue_template`, `create_issue_from_template` (templates) | the same checklist is typed a second time |
|
|
24
|
+
| Tests (unit, e2e, manual QA) | **Test management**: test project → suites (mirror test folders) → cases → plans → runs | `create_test_project`, `create_test_suite`, `create_test_cases`, `create_test_plan`, `create_test_run`, `set_test_result` (testing) | the repo has tests or a QA checklist |
|
|
25
|
+
| CI test results | **Test runs from JUnit XML**; flaky/failing report; bugs from failures | `import_test_results`, CLI `npx huly-mcp-selfhost junit <xml> --project <name>` in CI, `get_test_report`, `create_issue_from_test_result` (testing) | CI writes JUnit XML (Jest/Vitest reporter, `pytest --junitxml`, Gradle, Maven, go-junit-report) |
|
|
26
|
+
| README depth: architecture, ADRs, runbooks, specs | **Documents** in a project teamspace, nested; linked to issues | `create_teamspace`, `create_document` (`parentId` for nesting), `update_document`, `link_document` (documents) | onboarding: one teamspace per project with "Architecture", "Decisions", "Runbooks"; a spec → `issues_from_document` |
|
|
27
|
+
| Design reviews, comments on docs | **Document comments**, collaborators, public links | `add_document_comment`, `add_collaborator`, `create_public_link` (collaboration) | a document needs review or must be shared outside |
|
|
28
|
+
| Meeting notes | Document → issues with assignee and date | `issues_from_meeting` (agent) | notes have action items |
|
|
29
|
+
| Team chat about the project | **Channel** per project; threads per topic | `create_channel`, `send_message`, `reply_to_message` (chat) | onboarding, if the team chats in Huly |
|
|
30
|
+
| Pull requests | **GitHub integration** (sync is set up by the user in Huly) | `list_pull_requests`, `get_pull_request` (github) | project is GitHub-synced; review status in reports |
|
|
31
|
+
| Effort | **Time reports** per issue | `log_time`, `list_time_reports` (tracker) | the team tracks time (ask once) |
|
|
32
|
+
| Personal planning | **To-dos and time blocks** in the planner | `create_todo` (with `issue`), `schedule_todo` (planner) | the user plans their day in Huly |
|
|
33
|
+
| Release dates, demos, freezes | **Calendar events** | `create_event` (calendar) | a milestone has a fixed event |
|
|
34
|
+
| Binaries, designs, exports, recordings | **Drive** folders and versioned files | `create_drive`, `create_folder`, `upload_file` (drive) | assets live outside git |
|
|
35
|
+
| Extra issue data (customer, risk, platform) | **Custom fields** on issues or a project type | `create_custom_field`, `set_custom_fields` (fields) | the team keeps such data in titles or labels today |
|
|
36
|
+
| Records that are not tasks (ADR register, customers, devices) | **Cards** with card types | `list_card_types`, `create_card` (cards) | a list of things, not of work |
|
|
37
|
+
| Shipped products and versions | **Products** (read) | `list_products`, `get_product` (products) | only to read existing product data |
|
|
38
|
+
| Anything without a tool | Any Huly class | `list_classes`, `describe_class`, `query_documents` (generic); writes: `generic_*` with dry run (generic-write) | last resort — specific tools are cheaper |
|
|
39
|
+
|
|
40
|
+
## Order for a full setup
|
|
41
|
+
|
|
42
|
+
1. Status set → components → labels (+ categories) → milestones.
|
|
43
|
+
2. Teamspace + documents (architecture first) → link them to epics.
|
|
44
|
+
3. Existing work: epics/issues, assign components and milestones.
|
|
45
|
+
4. Templates for checklists that repeat (release, bug report).
|
|
46
|
+
5. Test project mirroring the test folders; CI JUnit import (give the user the CI step, don't edit CI without OK).
|
|
47
|
+
6. Channel, drive, custom fields, cards — only if the team works that way.
|
|
48
|
+
|
|
49
|
+
Report at the end: what exists now, what was skipped, which toolsets the user should keep enabled.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Bringing a project into Huly
|
|
2
|
+
|
|
3
|
+
How to set up or import a repository's project in Huly. `/huly:setup` asks the user which of these steps to do; never do more than was chosen.
|
|
4
|
+
|
|
5
|
+
## Ground rules
|
|
6
|
+
|
|
7
|
+
- **Projects are created by the user**, in Huly (the GitHub link needs OAuth there). You suggest the key: short, from the repo or app name (`SERV` for a server, `PLAY` for a player app).
|
|
8
|
+
- **Propose, then write.** Show what you will create (names, descriptions, dates) and write after the user agrees.
|
|
9
|
+
- **Check before creating:** `list_components`, `list_milestones`, `search_issues` — reuse what exists.
|
|
10
|
+
- Synced projects (GitHub ↔ Huly) show every change on both sides. An issue created in Huly also appears on GitHub; don't create it twice.
|
|
11
|
+
|
|
12
|
+
## Status set
|
|
13
|
+
|
|
14
|
+
Align to: Backlog, Todo, In Progress, Done, Canceled, Review in progress, Merged (`list_issue_statuses`, then `create_issue_status` for what is missing). Don't delete or rename existing statuses without asking.
|
|
15
|
+
|
|
16
|
+
## Components = areas of the code
|
|
17
|
+
|
|
18
|
+
- One per module/package/target, plus usually one for build & release (CI, signing, store/distribution) and `Product` for decisions without a code location.
|
|
19
|
+
- The description names the paths: `Sources/Player/, Tests/PlayerTests/`.
|
|
20
|
+
- Find them from the repo layout (`ls`, package manifests, workspace files), not from guesses.
|
|
21
|
+
|
|
22
|
+
## Milestones = releases or real delivery targets
|
|
23
|
+
|
|
24
|
+
- E.g. `v1.0 MVP`, `v0.1 TestFlight internal`, version ranges — **not** phases like `M0`/`M1`.
|
|
25
|
+
- Existing tags/releases (`git tag`) show the naming. Give each a target date; if no real date is known, propose one and **tell the user it is a proposal**.
|
|
26
|
+
- Phases and larger work packages are **epics** (issue + sub-issues via `create_issue_tree` or `set_parent`), not milestones.
|
|
27
|
+
|
|
28
|
+
## Existing issues
|
|
29
|
+
|
|
30
|
+
- After components and milestones exist, assign open issues to them (`bulk_update_issues` per component/milestone, after showing the mapping).
|
|
31
|
+
- Open GitHub issues of a freshly linked repo: **don't touch or import them**. Report how many there are and ask how to handle them.
|
|
32
|
+
|
|
33
|
+
## TODO/FIXME scan
|
|
34
|
+
|
|
35
|
+
- `grep -rn -E "TODO|FIXME"` over the source (skip vendored/generated code).
|
|
36
|
+
- Present a **proposal list** (file:line, text, suggested title, component). Create issues only for the items the user picks — in GitHub or Huly according to the repo's "where new issues go" rule. Duplicate check first.
|
|
37
|
+
|
|
38
|
+
## Architecture/status document
|
|
39
|
+
|
|
40
|
+
One Huly document as the entry point (`create_document` + `update_document` with Markdown), in the project's teamspace (ask which one, or suggest creating one named after the project):
|
|
41
|
+
|
|
42
|
+
- What it is (2–3 sentences)
|
|
43
|
+
- Stack and structure (modules ↔ components)
|
|
44
|
+
- How to build, test, release
|
|
45
|
+
- Known issues / open construction sites
|
|
46
|
+
- Links: repo, CI, deployments
|
|
47
|
+
|
|
48
|
+
Keep it factual and short; it is read by people and agents alike.
|
|
49
|
+
|
|
50
|
+
## Beyond the basics
|
|
51
|
+
|
|
52
|
+
Labels, issue templates, test management (incl. CI JUnit import), document structure, channel, drive, custom fields, cards: see [features.md](features.md) — what each is for, the tools, and which toolsets must be enabled.
|
|
53
|
+
|
|
54
|
+
## Report
|
|
55
|
+
|
|
56
|
+
End with: what was created (ids/names), what was skipped and why, which proposals (dates, keys) the user should confirm, and what they still have to do in Huly (e.g. create the project, link GitHub).
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Working with Huly
|
|
2
|
+
|
|
3
|
+
Keep Huly current as you work, in the same turn as the action. Every call costs a round trip and its output stays in context: **one call per question, one call per change.**
|
|
4
|
+
|
|
5
|
+
## 0. This repo's rules come first
|
|
6
|
+
|
|
7
|
+
- `CLAUDE.md`, `CLAUDE.local.md` or `AGENTS.md` may have a `## Huly` section (workspace, project, where new issues go, initiative, how token-saving). **It overrides everything below.** "Not used in this repository" = no Huly calls unless asked.
|
|
8
|
+
- No section and the user works with Huly here: offer `/huly:setup` once.
|
|
9
|
+
- Setting up or importing a project: [onboarding.md](onboarding.md). Using all of Huly (labels, templates, test management, documents, drive, custom fields, …) and which toolsets that needs: [features.md](features.md).
|
|
10
|
+
|
|
11
|
+
## 1. Know where you are — one call each
|
|
12
|
+
|
|
13
|
+
| Question | Call |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Which project is this repo? | `find_project_for_repo` with `git remote get-url origin` (never guess a workspace) |
|
|
16
|
+
| My work today / since yesterday | `my_day` / `standup` |
|
|
17
|
+
| What needs my attention? | `triage_inbox` (small `limit`) |
|
|
18
|
+
| How is the project doing? | `project_report` |
|
|
19
|
+
| Everything about PROJ-12 | `get_issue_context` (just status/assignee: `get_issue`) |
|
|
20
|
+
| Find something | `search_issues`, `search` — not `list_issues status=all` |
|
|
21
|
+
|
|
22
|
+
Narrow lists with filters (`status`, `assignee`, `milestoneLabel`, `componentLabel`, `parentIdentifier`, `limit`). More questions with measured sizes: [costs.md](costs.md).
|
|
23
|
+
|
|
24
|
+
## 2. Pick up and hand back
|
|
25
|
+
|
|
26
|
+
- Branch names like `proj-12-short-title` carry the issue id; the session hook reports it.
|
|
27
|
+
- `start_work` = In Progress + assign + full context. Blocked by open issues → say so first. Parallel agents: `claimAs` / `claim_issue`; never `force` without the user.
|
|
28
|
+
- `finish_work` = comment + PR link + status. Summary must say what is **not** verified. The auto-created PR issue goes under the feature issue it implements.
|
|
29
|
+
|
|
30
|
+
| Moment | Status |
|
|
31
|
+
|---|---|
|
|
32
|
+
| Work starts | In Progress (`start_work`) |
|
|
33
|
+
| PR open | Review in progress (`finish_work`) |
|
|
34
|
+
| PR merged | Done / Merged — usually via GitHub sync |
|
|
35
|
+
|
|
36
|
+
## 3. Create — after a duplicate check, in one call
|
|
37
|
+
|
|
38
|
+
- `search_issues` first; comment on an existing issue instead of creating a near-duplicate.
|
|
39
|
+
- `create_issue` takes `componentLabel`, `milestoneLabel`, `assignee`, `statusName`, `priority`, `dueDate` — no follow-up `update_issue`. Every issue gets a component, and a milestone if it belongs to a release. Nothing fits → say so; don't create components/milestones silently.
|
|
40
|
+
- Plans → `create_issue_tree` (epic + sub-issues + `blockedBy`), dry run first, then once with `dryRun: false`.
|
|
41
|
+
- Spec or meeting notes in a Huly document → `issues_from_document` / `issues_from_meeting`; don't retype the tasks.
|
|
42
|
+
- Same change on many issues → `bulk_update_issues`.
|
|
43
|
+
- Bugs/TODOs you notice while working: follow the repo's initiative rule; without one, create the issue (after the duplicate check) and mention it in your reply.
|
|
44
|
+
- Milestones are releases, not phases; phases are epics. Never create Huly projects — the user does that.
|
|
45
|
+
|
|
46
|
+
## 4. Don't spend calls on checks the tools do
|
|
47
|
+
|
|
48
|
+
- Names (status, component, milestone, person) are validated before anything is written; a wrong name returns a clear error. Don't list "just to be sure".
|
|
49
|
+
- Unknown parameters are rejected with the valid list, nothing is done. Write tools report what changed — don't re-read to confirm.
|
|
50
|
+
- Independent reads go in one turn, in parallel. Issue ids and names work everywhere; no `_id` lookups.
|
|
51
|
+
|
|
52
|
+
## 5. Be careful with
|
|
53
|
+
|
|
54
|
+
- Bulk changes, `move_issue`, deletes: show what will change first.
|
|
55
|
+
- GitHub-synced projects: every change appears on GitHub too; don't cross-post.
|
|
56
|
+
- `HULY_WRITE_PROJECTS` refusals: tell the user, don't work around them.
|
|
57
|
+
- A tool you need is missing: it is in a disabled toolset — `enable_toolsets` if available, otherwise tell the user which toolset to enable ([features.md](features.md)).
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ const connection_1 = require("./connection");
|
|
|
7
7
|
const env_1 = require("./env");
|
|
8
8
|
const watch_1 = require("./watch");
|
|
9
9
|
const junit_cli_1 = require("./junit-cli");
|
|
10
|
+
const redact_1 = require("./utils/redact");
|
|
10
11
|
async function main() {
|
|
11
12
|
if (process.argv[2] === 'watch') {
|
|
12
13
|
await (0, watch_1.runWatch)(process.argv.slice(3));
|
|
@@ -17,6 +18,10 @@ async function main() {
|
|
|
17
18
|
process.exit();
|
|
18
19
|
}
|
|
19
20
|
(0, env_1.normalizeEnv)();
|
|
21
|
+
// stdout is the JSON-RPC channel. Huly's client logs to it ("Client: onConnect 1"),
|
|
22
|
+
// which breaks strict MCP clients and makes mcp-proxy log parse errors. Send it to stderr,
|
|
23
|
+
// with session tokens masked (Huly logs its websocket URL including the token).
|
|
24
|
+
(0, redact_1.routeConsoleToStderr)();
|
|
20
25
|
const server = (0, server_1.createServer)();
|
|
21
26
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
22
27
|
process.on('SIGINT', async () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,wEAAgF;AAChF,qCAAuC;AACvC,6CAA8C;AAC9C,+BAAoC;AACpC,mCAAkC;AAClC,2CAAsC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,wEAAgF;AAChF,qCAAuC;AACvC,6CAA8C;AAC9C,+BAAoC;AACpC,mCAAkC;AAClC,2CAAsC;AACtC,2CAAqD;AAErD,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAA,gBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAA,oBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;IACD,IAAA,kBAAY,GAAE,CAAA;IACd,oFAAoF;IACpF,2FAA2F;IAC3F,gFAAgF;IAChF,IAAA,6BAAoB,GAAE,CAAA;IACtB,MAAM,MAAM,GAAG,IAAA,qBAAY,GAAE,CAAA;IAC7B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAA;IAE5C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,IAAA,4BAAe,GAAE,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAA,4BAAe,GAAE,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,6DAA6D;AAC/D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/registry.js
CHANGED
|
@@ -188,6 +188,8 @@ exports.TOOLS = [
|
|
|
188
188
|
{ name: 'finish_work', toolset: 'agent', description: 'Hand back: summary comment, link PR, status to review', schema: S.FinishWorkSchema, handler: agent_1.finishWork },
|
|
189
189
|
{ name: 'create_issue_tree', toolset: 'agent', description: 'Plan → epic + sub-issues with blockers; skips duplicates; dry run first', schema: S.CreateIssueTreeSchema, handler: agent_1.createIssueTree },
|
|
190
190
|
{ name: 'my_day', toolset: 'agent', description: 'Today at a glance: calendar, to-dos, my issues, reviews, unread inbox', schema: S.MyDaySchema, handler: overview_1.myDay },
|
|
191
|
+
{ name: 'issues_from_document', toolset: 'agent', description: 'Spec → epic + sub-issues from a document\'s open checklist items (else its sections); links the doc. Dry run first', schema: S.IssuesFromDocumentSchema, handler: agent_1.issuesFromDocument },
|
|
192
|
+
{ name: 'issues_from_meeting', toolset: 'agent', description: 'Meeting notes → issues: action items with @assignee and due date; links the doc. Dry run first', schema: S.IssuesFromMeetingSchema, handler: agent_1.issuesFromMeeting },
|
|
191
193
|
{ name: 'standup', toolset: 'agent', description: 'Standup: what I did since the last working day, today, blockers', schema: S.StandupSchema, handler: overview_1.standup },
|
|
192
194
|
{ name: 'release_notes', toolset: 'agent', description: 'Release notes from a milestone: features, fixes, PRs, still open', schema: S.ReleaseNotesSchema, handler: overview_1.releaseNotes },
|
|
193
195
|
{ name: 'project_report', toolset: 'agent', description: 'Weekly report: done, new, blocked, overdue, PRs, milestones, time', schema: S.ProjectReportSchema, handler: overview_1.projectReport },
|