@alphafox/cli 0.3.18 → 0.3.19

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.
@@ -1,153 +1,153 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "@alphafox/cli",
4
- "packageVersion": "0.3.18",
4
+ "packageVersion": "0.3.19",
5
5
  "contractVersion": "2026-08-31",
6
- "bundleHash": "19730c49321abe676e32d1200bff86533131ed4aa2922fdaf73fbd4e45165faf",
6
+ "bundleHash": "2107a1df1f931d2c6401aaa647851da86929ab2bce6c9956aa812c19522fac5a",
7
7
  "skills": [
8
8
  {
9
9
  "name": "alphafox",
10
- "version": "0.3.18",
10
+ "version": "0.3.19",
11
11
  "files": [
12
12
  {
13
13
  "path": "SKILL.md",
14
- "sha256": "d7c507cd954fd5a5a206aadcf52d3ae1341197c300d60203f9ac9940aba9605a",
14
+ "sha256": "1d8a69ae5d693ffa3a18317515aaf22a333fee0f77083e8b8c6916b1ce6bc0da",
15
15
  "size": 7950
16
16
  }
17
17
  ],
18
- "hash": "2225c66bbcadadc0c6cc2dda5681372289a8108ce91e0a5468f8c13f42c39781"
18
+ "hash": "a1dd0a8c3729819753add3d36b6d4aebae03fdb97bbf52273910c106530649cf"
19
19
  },
20
20
  {
21
21
  "name": "alphafox-account",
22
- "version": "0.3.18",
22
+ "version": "0.3.19",
23
23
  "files": [
24
24
  {
25
25
  "path": "SKILL.md",
26
- "sha256": "4118b32ae62329dde57de75ca1ca65a417f83c13261636977a352c8d1d378b5c",
26
+ "sha256": "fd097fe41f1279920a25bb13b82c8dffe58bdc209f6c211ecfc09fd5bdc849a8",
27
27
  "size": 784
28
28
  }
29
29
  ],
30
- "hash": "d144efc2cc5883ddd11ec63fd67438472f20cb2b11da8ad005736f08e1b70c25"
30
+ "hash": "59783023fdc832f44ab6d452aab6f608f7e072b087a83f9d582e420621a94aae"
31
31
  },
32
32
  {
33
33
  "name": "alphafox-admin",
34
- "version": "0.3.18",
34
+ "version": "0.3.19",
35
35
  "files": [
36
36
  {
37
37
  "path": "SKILL.md",
38
- "sha256": "1d5dab09efc36ddccead76ce4ca0a3ba734b977800c351ae2e71f9ca7c8709c6",
39
- "size": 1930
38
+ "sha256": "32df381f1f0373c42e496f0d7fd0b9cc6833263559c8657d1491b37a5af49fb4",
39
+ "size": 2078
40
40
  }
41
41
  ],
42
- "hash": "3a85d8a09b9ac2caa62b150191083348c0e1ddea353541227af261bdcf8af1c7"
42
+ "hash": "b326c9379bc7eef507099726269e63d57169c9c305d8bf677f9dd36c38378462"
43
43
  },
44
44
  {
45
45
  "name": "alphafox-auth",
46
- "version": "0.3.18",
46
+ "version": "0.3.19",
47
47
  "files": [
48
48
  {
49
49
  "path": "SKILL.md",
50
- "sha256": "4f35d76c147b151281bfcb9bb9bf601a521b7b35bd004c73e7a32a28b4b25802",
50
+ "sha256": "21842ddad8d3aa0c9042e8c10faac916f592fef844d4d9dcd60821a54e4b4f0c",
51
51
  "size": 2371
52
52
  }
53
53
  ],
54
- "hash": "3685595477e95a2c84bcd380e6c6de9f8e9c006613be983ebd23b099e8da2910"
54
+ "hash": "185f1ab61724affe0f8cd2e5cd3fe7db09dc17f94b760c96a84a9cfbd32e6c59"
55
55
  },
56
56
  {
57
57
  "name": "alphafox-cache",
58
- "version": "0.3.18",
58
+ "version": "0.3.19",
59
59
  "files": [
60
60
  {
61
61
  "path": "SKILL.md",
62
- "sha256": "9221dd3f1873080db447b7e2378fc6d8f12d70cc9a3720587a26fd853fa92cfb",
62
+ "sha256": "000b91d67f72553f1739b8eb55f0b40532ad55829757cfcc8e1e424b46cc92f6",
63
63
  "size": 1530
64
64
  }
65
65
  ],
66
- "hash": "7356774b2d336cad0b4a50c4f36575da13f75bdcc8e1daca43416d72770d93b5"
66
+ "hash": "b32cdd6e6239647fc93c3027a8a0879a800ffd5140e6738a542771e92c9d3f8e"
67
67
  },
68
68
  {
69
69
  "name": "alphafox-engine-backtest",
70
- "version": "0.3.18",
70
+ "version": "0.3.19",
71
71
  "files": [
72
72
  {
73
73
  "path": "SKILL.md",
74
- "sha256": "03dc3eb53d0c908c1612e2bcb400e36eb83485c5edf1a78c40138f5dad082812",
74
+ "sha256": "c4671d8cdf5894698fe4883462673b068d3df9c8c86d9de2afa0b925d6055a2d",
75
75
  "size": 9229
76
76
  }
77
77
  ],
78
- "hash": "76ad525091726105fe5136f9baaae5da2d428b12eb83ee48d473c314abde2930"
78
+ "hash": "a07b1b029d4c353204d1a6b2a3aad58287b4c7cf576a84652b479b396a24604a"
79
79
  },
80
80
  {
81
81
  "name": "alphafox-exchange",
82
- "version": "0.3.18",
82
+ "version": "0.3.19",
83
83
  "files": [
84
84
  {
85
85
  "path": "SKILL.md",
86
- "sha256": "c128bd2e17e690829ff0ac31f6614b3bf5c7e28cdd0041458ec12dc658e3ad52",
86
+ "sha256": "9987bec5a1a99dca1896f85a5dbcb74bfb53f17db184c11d9eb5f5dc59906b82",
87
87
  "size": 744
88
88
  }
89
89
  ],
90
- "hash": "2a863c1f64e104d16db3aa56f85e27ff4dcb93f6a2ef3bdaa646f4f37559c6bf"
90
+ "hash": "ba8844128b256f7f4d32b969e865598bc3992fb4a17c37452f5f57f685df5157"
91
91
  },
92
92
  {
93
93
  "name": "alphafox-market",
94
- "version": "0.3.18",
94
+ "version": "0.3.19",
95
95
  "files": [
96
96
  {
97
97
  "path": "SKILL.md",
98
- "sha256": "646c4e0bedf21cab44403c7f39ec99e7ebd437773f1813fc5b65e969a5264fde",
98
+ "sha256": "ec5faeca5ed02b9b3ce9d9477f3a2b0c4ff70c994a754dfbe166f7569867efbc",
99
99
  "size": 3079
100
100
  }
101
101
  ],
102
- "hash": "081ed543a65a936a941845eff3db03e1485071d49f260a5e7fe77484b0784911"
102
+ "hash": "7caf11ff0dba5d2fb630d5b43f4e2d3d40453908cf0401886a73e3aab00f89ba"
103
103
  },
104
104
  {
105
105
  "name": "alphafox-notification",
106
- "version": "0.3.18",
106
+ "version": "0.3.19",
107
107
  "files": [
108
108
  {
109
109
  "path": "SKILL.md",
110
- "sha256": "2b4c37b6b629f8f526b72ff2079039de5a99e168381191345101c85921b05832",
110
+ "sha256": "5980c926f71cff2d990c7c672c26947d34cab0fdaac94503d09a7ede80ac6e2b",
111
111
  "size": 699
112
112
  }
113
113
  ],
114
- "hash": "146cff2bd50aba4d69f07124d8c04acf5b7198b7e32cb9130442d629eedc77a5"
114
+ "hash": "c0bf37eaaf27abd3a18c2cf11d91bc58bdb67817e5b17116ff96570be7d43612"
115
115
  },
116
116
  {
117
117
  "name": "alphafox-shared",
118
- "version": "0.3.18",
118
+ "version": "0.3.19",
119
119
  "files": [
120
120
  {
121
121
  "path": "SKILL.md",
122
- "sha256": "397cd48bed1fc583e421906e696104e26fbb56de34407dda7c1336e50c72cb41",
122
+ "sha256": "4dc5689ede3c8877217f38e4894ed4ca5c76ad2db7d7a3d6f3245e917e7f7864",
123
123
  "size": 6920
124
124
  }
125
125
  ],
126
- "hash": "213e118edd8de0144972b3fee9cb3e3b6d915ee969cb6645f8a9d6bf07c6c904"
126
+ "hash": "8fc7ea7232796dbd268b04afd28d0b3ef17aeae06e1c83cb1cf1c9e6f4edb9fc"
127
127
  },
128
128
  {
129
129
  "name": "alphafox-strategy",
130
- "version": "0.3.18",
130
+ "version": "0.3.19",
131
131
  "files": [
132
132
  {
133
133
  "path": "SKILL.md",
134
- "sha256": "2f7fcee652edaf36770501cb6d5854bfcd193c90f4af9d17de0c319b263bbb50",
134
+ "sha256": "df4e53e1bbda4323795cc9946520476303aa5e77deaee5fd3e7c6d543ec201eb",
135
135
  "size": 4862
136
136
  }
137
137
  ],
138
- "hash": "ad7f6dc8b1ebce16a4d52a8c7edf69f9a4bb21b7f22c58fcc7721b2ac16e51a8"
138
+ "hash": "644611a9c283692cd77555986da7614c87c38118a83519656c3165968bc65a7a"
139
139
  },
140
140
  {
141
141
  "name": "alphafox-trading",
142
- "version": "0.3.18",
142
+ "version": "0.3.19",
143
143
  "files": [
144
144
  {
145
145
  "path": "SKILL.md",
146
- "sha256": "48177ed0dbb65eb812ad18dd8667b107437f01dd79050186331da4ba000b59fa",
146
+ "sha256": "5df4e36c54379bc6389c5c9822c8ebc7817b8728103577eb219ccea707743966",
147
147
  "size": 4493
148
148
  }
149
149
  ],
150
- "hash": "dde92790169c72b6e9ffe685af5d94b0d32b84d4dd2d27be0c2492e346a5eb90"
150
+ "hash": "340c1014ce0b0df03d1b98a1f6d0e5c44b9960dafa94accfefdb7fbeb4ab9f87"
151
151
  }
152
152
  ]
153
153
  }
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export declare const CLI_NAME = "alphafox";
2
2
  export declare const CLI_PACKAGE = "@alphafox/cli";
3
- export declare const CLI_VERSION = "0.3.18";
3
+ export declare const CLI_VERSION = "0.3.19";
4
4
  export { CATALOG_VERSION as CLI_CONTRACT_VERSION } from "./catalog/operations";
package/dist/version.js CHANGED
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CLI_CONTRACT_VERSION = exports.CLI_VERSION = exports.CLI_PACKAGE = exports.CLI_NAME = void 0;
4
4
  exports.CLI_NAME = "alphafox";
5
5
  exports.CLI_PACKAGE = "@alphafox/cli";
6
- exports.CLI_VERSION = "0.3.18";
6
+ exports.CLI_VERSION = "0.3.19";
7
7
  var operations_1 = require("./catalog/operations");
8
8
  Object.defineProperty(exports, "CLI_CONTRACT_VERSION", { enumerable: true, get: function () { return operations_1.CATALOG_VERSION; } });
@@ -1,156 +1,45 @@
1
- # Issue tracker: Feishu Tasks
1
+ # Issue tracker: GitHub
2
2
 
3
- Issues and specs for this repo live as tasks in the **AlphaFox-Issues** Feishu (Lark) tasklist. Use the `lark-cli` CLI ([`@larksuite/cli`](https://github.com/larksuite/cli)) for all operations, always with `--as user` — a task created by the bot identity is invisible in the human's task centre.
4
-
5
- List: <https://applink.feishu.cn/client/todo/task_list?guid=6d628d79-cdfe-47cc-98f7-35561944494b>
6
-
7
- ## Identifiers
8
-
9
- An issue's identity is its **task GUID** — a UUID. There is no usable short number: the `t101420`-style id the Feishu UI shows (`task_id`, `suite_entity_num`) is **display-only** and every API rejects it, so a bare `#42` or `t101420` cannot be looked up directly.
10
-
11
- - Prefer the task **URL** (`https://applink.feishu.cn/client/todo/detail?guid=<GUID>`) — the GUID is the `guid` query param. Every write command below also accepts the URL in place of the GUID.
12
- - Given only a `t1014xx` number or a title fragment, resolve it with `lark-cli task +search --query "<title words>" --as user` and match on `summary`. Search spans **all** the user's tasks, not just this tasklist, so confirm the match before writing.
13
- - When narrating to the human, refer to an issue by its **title**, not its GUID.
14
-
15
- ## Setup values
16
-
17
- - **Tasklist GUID**: `6d628d79-cdfe-47cc-98f7-35561944494b`
18
- - **`Type` field GUID**: `227d69e7-e535-40f0-b64f-4e90247149e2`
19
-
20
- Triage roles are **sections** — a task sits in exactly one, so the state machine can't be violated. `待分类` is the default section, so anything created without a section lands there as untriaged.
21
-
22
- | Canonical role | Section | Section GUID |
23
- | -------------- | ------- | ------------ |
24
- | _(untriaged)_ | `待分类` (default) | `4ca8fd68-9a08-5794-1598-8e5a394e8638` |
25
- | `needs-triage` | `待评估` | `44e58692-1ced-462b-99bb-bf082a745ef3` |
26
- | `needs-info` | `待补充信息` | `0cff4cf9-00b9-42bd-b482-5cd06a51b99b` |
27
- | `ready-for-agent` | `可交给 Agent` | `1ce586d5-7953-4d68-b41a-d4b2851f5806` |
28
- | `ready-for-human` | `需人工处理` | `8713387c-e758-4730-9de8-0b30859674ff` |
29
- | `wontfix` | `不予处理` | `00d4b874-1a4a-43d8-b0cf-fcb52460f9bf` |
30
- | _(wayfinder — outside the triage queue)_ | `探路图` | `bab88abf-0bf9-407d-806b-680901a86dd7` |
31
-
32
- Every other label is an option on the single-select `Type` field. Address an option by its GUID, never by name — the skills' canonical labels use a colon (`wayfinder:map`) while the Feishu options are named with a hyphen (`wayfinder-map`), so this table is the only mapping between them:
33
-
34
- | Label | Option GUID |
35
- | ----- | ----------- |
36
- | `bug` | `0eb51704-bead-4e8e-93be-dd8d02c1d20c` |
37
- | `enhancement` | `ebd05bc8-ab6c-4a56-8628-6c3284d9f1f9` |
38
- | `spec` | `399a640f-5d51-4dab-a4f3-da3df638ec8a` |
39
- | `ticket` | `3bb7ca44-ac8c-4b75-8925-96fc457fb974` |
40
- | `wayfinder:map` | `8cd13987-010e-46f0-808f-a8f289791cf5` |
41
- | `wayfinder:research` | `f18b808a-d978-41cb-9bef-cd0708fecf0c` |
42
- | `wayfinder:prototype` | `49126969-48dc-4297-96d4-36d176ffb8bb` |
43
- | `wayfinder:grilling` | `265feb46-9ac8-4c03-afa8-9400296defe4` |
44
- | `wayfinder:task` | `ed48b848-01d0-406b-ac7d-a96ce66cee0d` |
3
+ Issues and specs for this repo live as GitHub issues. Use the `gh` CLI for all operations.
45
4
 
46
5
  ## Conventions
47
6
 
48
- - **Shared-list title** prefix every issue/task title with `[alphafox-cli]` so the repository remains identifiable on the shared board.
49
- - **Tracker boundary** Matt Skills issues, specs, tickets, triage items, and wayfinder maps belong in `AlphaFox-Issues`, not a quarterly execution list. If quarterly planning initiated the work, link its absolute Feishu task URL instead of duplicating workflow state.
50
-
51
- - **Create an issue** one call sets body, section (triage role) and `Type`:
52
-
53
- ```bash
54
- lark-cli task tasks create --as user --params '{"user_id_type":"open_id"}' --data '{
55
- "summary": "<title>",
56
- "description": "<body>",
57
- "tasklists": [{"tasklist_guid": "6d628d79-cdfe-47cc-98f7-35561944494b", "section_guid": "<SECTION_GUID>"}],
58
- "custom_fields": [{"guid": "227d69e7-e535-40f0-b64f-4e90247149e2", "single_select_value": "<OPTION_GUID>"}]
59
- }'
60
- ```
61
-
62
- For an untriaged issue with no label, `lark-cli task +create --tasklist-id 6d628d79-cdfe-47cc-98f7-35561944494b --summary "..." --description "..." --as user` is enough — it lands in `待分类`.
63
-
64
- - **Read an issue** — the body and the comments are two calls:
65
-
66
- ```bash
67
- lark-cli task tasks get --as user --params '{"task_guid": "<GUID>", "user_id_type": "open_id"}'
68
- lark-cli api GET /open-apis/task/v2/comments --as user \
69
- --params '{"resource_type": "task", "resource_id": "<GUID>", "page_size": 50, "user_id_type": "open_id"}'
70
- ```
71
-
72
- `tasks get` returns `description` (the body), `custom_fields` (the `Type` label), `tasklists[].section_guid` (the triage role), `members` (assignees), `status` (`todo`/`done`), `dependencies` (blockers) and `parent_task_guid`. Comments are **not** exposed by `lark-cli task`; the raw `api` call above is the only way to read them.
73
-
74
- - **List a triage bucket** — one call per section, and this is the cheap path:
75
-
76
- ```bash
77
- lark-cli task sections tasks --as user --params '{"section_guid": "<SECTION_GUID>", "completed": false, "page_size": 100}'
78
- ```
79
-
80
- Returns a brief per task — `guid`, `summary`, `completed_at`, `subtask_count` — which is all a queue listing needs. Pass `created_from`/`created_to` to window by age; results come oldest-first. Reading a task's `Type` or assignees means a `tasks get` per task, so don't do it while building a queue listing.
81
-
82
- - **List every issue**: `lark-cli task tasklists tasks --as user --params '{"tasklist_guid": "6d628d79-cdfe-47cc-98f7-35561944494b", "completed": false, "page_size": 100}'`.
7
+ - **Create an issue**: `gh issue create --title "..." --body "..."`. Use a heredoc for multi-line bodies.
8
+ - **Read an issue**: `gh issue view <number> --comments`, filtering comments by `jq` and also fetching labels.
9
+ - **List issues**: `gh issue list --state open --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'` with appropriate `--label` and `--state` filters.
10
+ - **Comment on an issue**: `gh issue comment <number> --body "..."`
11
+ - **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
12
+ - **Close**: `gh issue close <number> --comment "..."`
83
13
 
84
- - **Comment on an issue**: `lark-cli task +comment --task-id <GUID> --content "..." --as user`. Plain text Feishu renders no markdown in comments, so keep formatting light.
85
-
86
- - **Apply a triage role** — move the task to that role's section. Re-adding an existing task with a new `--section-guid` moves it; there is no separate "remove from old section" step:
87
-
88
- ```bash
89
- lark-cli task +tasklist-task-add --tasklist-id 6d628d79-cdfe-47cc-98f7-35561944494b --task-id <GUID> --section-guid <SECTION_GUID> --as user
90
- ```
91
-
92
- - **Apply a `Type` label** — patch the custom field. This replaces the previous value, since the field is single-select:
93
-
94
- ```bash
95
- lark-cli task tasks patch --as user --params '{"task_guid": "<GUID>"}' --data '{
96
- "task": {"custom_fields": [{"guid": "227d69e7-e535-40f0-b64f-4e90247149e2", "single_select_value": "<OPTION_GUID>"}]},
97
- "update_fields": ["custom_fields"]
98
- }'
99
- ```
100
-
101
- - **Edit the body**: same shape, with `{"task": {"description": "..."}, "update_fields": ["description"]}`. A patch **replaces** the description, so read it first and re-send the whole text.
102
-
103
- - **Every markdown link in a body needs a real absolute URL.** Feishu parses `[text](target)` in `description` and validates the target, rejecting the entire write with `Invalid Param 'description', url in description is invalid` when it isn't one. A placeholder `(link)`, an empty `()`, and a repo-relative `(./src/foo.ts)` all fail. Link to an absolute `https://` URL, or drop the link syntax and name the thing in plain text. Headings, lists, bold, bare URLs and task GUIDs are all fine.
104
-
105
- - **Close**: `lark-cli task +complete --task-id <GUID> --as user`. It takes no closing comment, so post the explanation with `+comment` first, then complete. Reopen with `lark-cli task +reopen --task-id <GUID> --as user`.
106
-
107
- - **Assign**: `lark-cli task +assign --task-id <GUID> --add <open_id> --as user` (`--remove` to unassign). Get your own `open_id` from `lark-cli auth status --jq '.identities.user.openId'`.
14
+ Infer the repo from `git remote -v`; `gh` does this automatically when run inside a clone.
108
15
 
109
16
  ## Pull requests as a triage surface
110
17
 
111
18
  **PRs as a request surface: no.** _(Set to `yes` if this repo treats external PRs as feature requests; `/triage` reads this flag.)_
112
19
 
113
- Feishu Tasks holds no code, so PRs live on the GitHub remote. When this flag is `yes`, triage reads a PR and its diff with `gh pr view` / `gh pr list` / `gh pr diff` while the roles and states stay here in the tasklist: a PR under triage gets a task in this list whose body links the PR. Numbering never collides, because a task GUID and a `#42` are different shapes.
20
+ When set to `yes`, PRs run through the same labels and states as issues, using the `gh pr` equivalents:
21
+
22
+ - **Read a PR**: `gh pr view <number> --comments` and `gh pr diff <number>` for the diff.
23
+ - **List external PRs for triage**: `gh pr list --state open --json number,title,body,labels,author,authorAssociation,comments` then keep only `authorAssociation` of `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, or `NONE` (drop `OWNER`/`MEMBER`/`COLLABORATOR`).
24
+ - **Comment / label / close**: `gh pr comment`, `gh pr edit --add-label`/`--remove-label`, `gh pr close`.
25
+
26
+ GitHub shares one number space across issues and PRs, so a bare `#42` may be either: resolve with `gh pr view 42` and fall back to `gh issue view 42`.
114
27
 
115
28
  ## When a skill says "publish to the issue tracker"
116
29
 
117
- Create a task in this tasklist. Put the whole document in `description`, set `Type`, and place it in the section matching its triage role.
30
+ Create a GitHub issue.
118
31
 
119
32
  ## When a skill says "fetch the relevant ticket"
120
33
 
121
- Run `tasks get` for the body plus the raw `comments` call for the history — an agent brief or a resolution lives in one or the other.
34
+ Run `gh issue view <number> --comments`.
122
35
 
123
36
  ## Wayfinding operations
124
37
 
125
- Used by `/wayfinder`. The **map** is a task; its tickets are **subtasks** of it.
126
-
127
- - **Map**: a task with `Type` = `wayfinder:map`, in `探路图`, holding the Destination / Notes / Decisions-so-far / Fog body in `description`.
128
- - **Child ticket**: create the task, then parent it — `lark-cli task +set-ancestor --task-id <CHILD_GUID> --ancestor-id <MAP_GUID> --as user`. Parenting **keeps** the child's tasklist and section membership, so tickets stay visible in `探路图`. Label each with `Type` = `wayfinder:<type>`.
129
- - **Blocking**: Feishu's **native task dependencies** — the canonical, UI-visible representation. `type: "prev"` means "blocks this task", so a child blocked by another records the blocker as `prev`:
130
-
131
- ```bash
132
- lark-cli api POST /open-apis/task/v2/tasks/<CHILD_GUID>/add_dependencies --as user \
133
- --data '{"dependencies": [{"task_guid": "<BLOCKER_GUID>", "type": "prev"}]}'
134
- ```
135
-
136
- The reciprocal `next` edge appears on the blocker automatically. Drop an edge with `--data '{"dependencies": [{"task_guid": "<BLOCKER_GUID>"}]}'` against `.../remove_dependencies`. Dependencies are **not** settable through `tasks create` or `tasks patch` — the raw `api` call is the only route, so tickets must exist before they can be wired, which is why charting creates first and wires second.
137
-
138
- - **Frontier query** — one call, because `subtasks list` returns *full* task objects rather than briefs:
139
-
140
- ```bash
141
- lark-cli task subtasks list --as user --params '{"task_guid": "<MAP_GUID>", "page_size": 100, "user_id_type": "open_id"}'
142
- ```
143
-
144
- Each child carries `status`, `members`, `dependencies` and `description`. Filter locally: keep `status` of `todo`, drop any with a `members` entry whose `role` is `assignee` (claimed), and drop any whose `prev` dependencies include a task still `todo` (blocked). Blockers that are siblings on the same map are already in this response; resolve any others with `tasks get`. First in map order wins.
145
-
146
- - **Claim**: `lark-cli task +assign --task-id <GUID> --add <your open_id> --as user` — the session's first write.
147
- - **Resolve**: `+comment` with the answer, then `+complete`, then patch the map's `description` to append a context pointer to Decisions-so-far. That pointer's link must be the ticket's full applink URL — a Decisions-so-far line written as `[title](link)` is rejected by the description's URL validation, taking the whole map update with it.
148
-
149
- ## Re-reading the setup values
150
-
151
- ```bash
152
- lark-cli task sections list --as user --params '{"resource_type": "tasklist", "resource_id": "6d628d79-cdfe-47cc-98f7-35561944494b", "page_size": 50}'
153
- lark-cli task custom_fields list --as user --params '{"resource_type": "tasklist", "resource_id": "6d628d79-cdfe-47cc-98f7-35561944494b", "page_size": 50}'
154
- ```
38
+ Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
155
39
 
156
- `custom_fields list` returns each option's `guid` alongside its `name`, which is what the `Type` table above records.
40
+ - **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `gh issue create --label wayfinder:map`.
41
+ - **Child ticket**: an issue linked to the map as a GitHub sub-issue (`gh api` on the sub-issues endpoint). Where sub-issues aren't enabled, add the child to a task list in the map body and put `Part of #<map>` at the top of the child body. Labels: `wayfinder:<type>` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev.
42
+ - **Blocking**: GitHub's **native issue dependencies**, the canonical, UI-visible representation. Add an edge with `gh api --method POST repos/<owner>/<repo>/issues/<child>/dependencies/blocked_by -F issue_id=<blocker-db-id>`, where `<blocker-db-id>` is the blocker's numeric **database id** (`gh api repos/<owner>/<repo>/issues/<n> --jq .id`, _not_ the `#number` or `node_id`). GitHub reports `issue_dependencies_summary.blocked_by` (open blockers only, the live gate). Where dependencies aren't available, fall back to a `Blocked by: #<n>, #<n>` line at the top of the child body. A ticket is unblocked when every blocker is closed.
43
+ - **Frontier query**: list the map's open children (`gh issue list --state open`, scoped to the map's sub-issues / task list), drop any with an open blocker (`issue_dependencies_summary.blocked_by > 0`, or an open issue in the `Blocked by` line) or an assignee; first in map order wins.
44
+ - **Claim**: `gh issue edit <n> --add-assignee @me`, the session's first write.
45
+ - **Resolve**: `gh issue comment <n> --body "<answer>"`, then `gh issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.
@@ -1,18 +1,15 @@
1
1
  # Triage Labels
2
2
 
3
- The skills speak in terms of five canonical triage roles. On this repo's tracker (Feishu Tasks) a role is not a label but a **section** of the AlphaFox-Issues tasklist — a task sits in exactly one, so the state machine can't be violated. `issue-tracker.md` holds the section GUIDs and the command that moves a task between them.
3
+ The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
4
4
 
5
- | Label in mattpocock/skills | Section in our tracker | Meaning |
6
- | -------------------------- | ---------------------- | ---------------------------------------- |
7
- | _(no label yet)_ | `待分类` | Never triaged the default section |
8
- | `needs-triage` | `待评估` | Maintainer needs to evaluate this issue |
9
- | `needs-info` | `待补充信息` | Waiting on reporter for more information |
10
- | `ready-for-agent` | `可交给 Agent` | Fully specified, ready for an AFK agent |
11
- | `ready-for-human` | `需人工处理` | Requires human implementation |
12
- | `wontfix` | `不予处理` | Will not be actioned |
5
+ | Label in mattpocock/skills | Label in our tracker | Meaning |
6
+ | -------------------------- | -------------------- | ---------------------------------------- |
7
+ | `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
8
+ | `needs-info` | `needs-info` | Waiting on reporter for more information |
9
+ | `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
10
+ | `ready-for-human` | `ready-for-human` | Requires human implementation |
11
+ | `wontfix` | `wontfix` | Will not be actioned |
13
12
 
14
- When a skill mentions a role (e.g. "apply the AFK-ready triage label"), move the task to the corresponding section from this table.
13
+ When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
15
14
 
16
- The remaining labels — the `bug` / `enhancement` categories and wayfinder's `wayfinder:<type>` — are **not** sections. They are options on the single-select `Type` field, because they coexist with a triage role rather than replacing it. `issue-tracker.md` holds their option GUIDs.
17
-
18
- Editing the right-hand column here is not enough on its own: rename a section in Feishu and its GUID stays the same, so update this table and leave `issue-tracker.md`'s GUIDs alone. Adding or removing a section is the case that changes GUIDs, and then both files need re-syncing.
15
+ Edit the right-hand column to match whatever vocabulary you actually use.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alphafox/cli",
3
- "version": "0.3.18",
3
+ "version": "0.3.19",
4
4
  "description": "AlphaFox CLI — Agent/Human entry for the public Application API.",
5
5
  "type": "commonjs",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-account
3
3
  description: Account, wallet, and subscription read paths.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Account / wallet
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-admin
3
3
  description: Admin-only operations reusing Web role authorization.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Admin
@@ -16,7 +16,7 @@ High-risk cataloged admin writes: `alphafox schema <operationId>` first, then `-
16
16
 
17
17
  ## Passivbot paper acceptance
18
18
 
19
- This Stage 1 endpoint is intentionally absent from the public Operation Registry and typed CLI catalog. The only allowed uncataloged admin path is the exact direct route below. Its JSON body is strict: `name`, `exchangeConnectorId`, and `config` are required; `configSchemaVersion` may only be `1`; `autoStart` is optional and defaults to `true`. Do not add server-owned fields.
19
+ This Stage 1 endpoint is intentionally absent from the public Operation Registry and typed CLI catalog. The only allowed uncataloged admin path is the exact direct route below. Its JSON body is strict: `name`, `exchangeConnectorId`, and `config` are required; `configSchemaVersion` accepts only `1` and `2`; `autoStart` is optional and defaults to `true`. Use `2` for new acceptance traders and `1` only when replaying an existing v1 config. The `config` object must match the selected version. Do not add server-owned fields.
20
20
 
21
21
  Preview the exact raw request first. The unknown/high-risk gate must return `confirmation_required`; show the requested action and risk to the operator, wait for explicit confirmation, then rerun the same command with `--yes`.
22
22
 
@@ -31,7 +31,7 @@ The config file shape is:
31
31
  {
32
32
  "name": "Passivbot paper acceptance",
33
33
  "exchangeConnectorId": "<internal-paper-connector-id>",
34
- "configSchemaVersion": 1,
34
+ "configSchemaVersion": 2,
35
35
  "config": {},
36
36
  "autoStart": true
37
37
  }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox
3
3
  description: AlphaFox CLI entry router. Use for any AlphaFox request — install, update, login, whoami, 回测, engine backtest, 清理回测缓存 / 历史数据, strategy definitions, create/list/start/stop a running strategy (trader), ticker/标的 resolve (美股 or crypto), market data, exchange connectors, wallet, subscriptions, notifications, or admin. After 回测 or 运行策略, include the dashboard URL from the domain skill. When the user asks 排行榜, include https://www.alphafox.app/zh/dashboard/leaderboard. After a successful install and login, present the 新人引导 in this file (Lite square 带单员 + classic strategies). If a CLI command prints `[alphafox] update available`, ask the user「检测到新的版本,是否需要我帮你升级?」and only then run `alphafox update --format json --no-input`. After a large backtest, if tape cache is large, ask「回测下载的历史数据比较大,要不要我帮你清理本地缓存?」then open `alphafox-cache`. Start here, then open the routed domain skill. Do not guess alphafox-engine-backtest vs alphafox-strategy vs alphafox-trading from memory.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # AlphaFox
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-shared
3
3
  description: Shared AlphaFox CLI rules for Agents — auth, profiles, envelopes, risk gates, public operationIds, and dashboard links after 回测 / 运行策略 / 排行榜.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # AlphaFox shared Agent contract
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-auth
3
3
  description: Login, status, logout, whoami, and environment isolation for AlphaFox CLI.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Auth Skill
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-cache
3
3
  description: Inspect and clean local Engine backtest caches (downloaded OHLCV tape and wasm runtime). Use when the user asks to 清理缓存, free disk, or after a large historical backtest.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Cache
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-engine-backtest
3
3
  description: Local Engine WASM backtest (alphafox engine-backtest run|sweep) vs catalog experiment CRUD. After a persisted run, include https://www.alphafox.app/zh/dashboard/traders/backtest/{experimentId}.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Engine Backtest
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-exchange
3
3
  description: Exchange connectors list and connection management via Public API.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Exchange connectors
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-market
3
3
  description: Market data and ticker resolution for US equity perps, RWAs, and crypto on the same perp catalog. Use when the user names 美股, NVDA, AAPL, BTC, or any 标的. Keep the operator's asset class via symbolMetadata — do not rewrite NVDA into a crypto coin.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Market
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-notification
3
3
  description: Notification channels and subscriptions.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Notification
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-strategy
3
3
  description: Strategy definitions — list types, read a definition's contract, and validate config. Creating a running strategy is creating a trader; use alphafox-trading for that. Local Engine backtest is alphafox-engine-backtest.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Strategy definitions
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: alphafox-trading
3
3
  description: Running strategies (traders) — create, list, start, and stop. A trader is a live or paper strategy instance (grid, dca, copy, …), not a person. Default Engine create uses autoStart true (创建即开始). Use autoStart false only when the user asks to create without starting. After create or start, include https://www.alphafox.app/zh/dashboard/traders/{traderId}.
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  ---
6
6
 
7
7
  # Running strategies (traders)