@chinhae/atw-cli 0.2.3 → 0.2.4

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,3 +1,3 @@
1
- export { MEANINGFUL_EVENT_KINDS, matchesEventFilter, } from "@chinhae/atw-core/channel";
1
+ export { matchesEventFilter } from "@chinhae/atw-core/channel";
2
2
  export type { ChannelEventFilter } from "@chinhae/atw-core/channel";
3
3
  //# sourceMappingURL=filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,2 +1,2 @@
1
- export { MEANINGFUL_EVENT_KINDS, matchesEventFilter, } from "@chinhae/atw-core/channel";
1
+ export { matchesEventFilter } from "@chinhae/atw-core/channel";
2
2
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -7,21 +7,12 @@
7
7
  * import from a stable local path while command files migrate to the
8
8
  * core public API directly.
9
9
  */
10
- export { GLOBAL_PROJECT_KEY, CHANNEL_TYPES, THREAD_ACTIONS, parseChannelScope, parseChannelType, parseThreadAction, normalizeThreadKey, asStringArray, asContextEntries, buildContextEntries, } from "@chinhae/atw-core/channel";
11
- export type { ChannelScope, ChannelType, ChannelRef, ChannelMetadata, ContextEntry, FileContextEntry, RawContextEntry, ThreadAction, EventOrigin, } from "@chinhae/atw-core/channel";
12
- import type { ContextEntry } from "@chinhae/atw-core/channel";
10
+ export { GLOBAL_PROJECT_KEY, parseChannelScope, parseChannelType, parseThreadAction, normalizeThreadKey, } from "@chinhae/atw-core/channel";
11
+ export type { ChannelScope, ChannelRef, ContextEntry, ThreadAction, } from "@chinhae/atw-core/channel";
13
12
  /**
14
13
  * CSV parser kept colocated with the schema for CLI command files that
15
14
  * trim comma-separated label / target lists. Pure helper — does not
16
15
  * touch the channel store.
17
16
  */
18
17
  export declare function parseCsv(value: string | undefined): string[] | undefined;
19
- /**
20
- * Legacy alias accepted by CLI flag parsers — old code calls this when
21
- * processing `--linked-context-file` / `--linked-context-raw`. New code
22
- * uses {@link buildContextEntries} directly.
23
- *
24
- * @deprecated Use buildContextEntries.
25
- */
26
- export declare function parseLinkedContext(files: string[] | undefined, raw: string[] | undefined): ContextEntry[] | undefined;
27
18
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAMxE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,GACxB,YAAY,EAAE,GAAG,SAAS,CAE5B"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAMxE"}
@@ -7,8 +7,7 @@
7
7
  * import from a stable local path while command files migrate to the
8
8
  * core public API directly.
9
9
  */
10
- export { GLOBAL_PROJECT_KEY, CHANNEL_TYPES, THREAD_ACTIONS, parseChannelScope, parseChannelType, parseThreadAction, normalizeThreadKey, asStringArray, asContextEntries, buildContextEntries, } from "@chinhae/atw-core/channel";
11
- import { buildContextEntries } from "@chinhae/atw-core/channel";
10
+ export { GLOBAL_PROJECT_KEY, parseChannelScope, parseChannelType, parseThreadAction, normalizeThreadKey, } from "@chinhae/atw-core/channel";
12
11
  /**
13
12
  * CSV parser kept colocated with the schema for CLI command files that
14
13
  * trim comma-separated label / target lists. Pure helper — does not
@@ -21,14 +20,4 @@ export function parseCsv(value) {
21
20
  .filter(Boolean);
22
21
  return out && out.length > 0 ? out : undefined;
23
22
  }
24
- /**
25
- * Legacy alias accepted by CLI flag parsers — old code calls this when
26
- * processing `--linked-context-file` / `--linked-context-raw`. New code
27
- * uses {@link buildContextEntries} directly.
28
- *
29
- * @deprecated Use buildContextEntries.
30
- */
31
- export function parseLinkedContext(files, raw) {
32
- return buildContextEntries(files, raw);
33
- }
34
23
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAcnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,MAAM,GAAG,GAAG,KAAK;QACf,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA2B,EAC3B,GAAyB;IAEzB,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AASnC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,MAAM,GAAG,GAAG,KAAK;QACf,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
@@ -1,5 +1,5 @@
1
- export { reduceThreads, buildThreadAliasResolver, collectThreadTimeline, } from "@chinhae/atw-core/channel";
2
- export type { ThreadState, ThreadAliasResolver, } from "@chinhae/atw-core/channel";
1
+ export { reduceThreads } from "@chinhae/atw-core/channel";
2
+ export type { ThreadState } from "@chinhae/atw-core/channel";
3
3
  import type { ThreadState } from "@chinhae/atw-core/channel";
4
4
  export declare function formatThreadBoard(states: ThreadState[]): string[];
5
5
  //# sourceMappingURL=thread-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-state.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAcjE"}
1
+ {"version":3,"file":"thread-state.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAcjE"}
@@ -1,4 +1,4 @@
1
- export { reduceThreads, buildThreadAliasResolver, collectThreadTimeline, } from "@chinhae/atw-core/channel";
1
+ export { reduceThreads } from "@chinhae/atw-core/channel";
2
2
  export function formatThreadBoard(states) {
3
3
  if (states.length === 0)
4
4
  return ["(no threads)"];
@@ -1 +1 @@
1
- {"version":3,"file":"thread-state.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AASnC,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO;QACL,uBAAuB;QACvB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;QACvF,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"thread-state.js","sourceRoot":"","sources":["../../../../src/commands/channel/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM1D,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO;QACL,uBAAuB;QACvB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;QACvF,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.2.4",
3
+ "description": "Request Triage grades a request on what it asserts rather than what it estimates, and the routing table names the six skills the AI cannot invoke.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "Two changes to the workflow.md template, both measured before they landed. Request Triage gained a paragraph telling the AI to separate a request's checkable assertions from the requester's estimates of size, and to grade the path on the former — including the estimate a requester makes by naming a path outright. Three rounds of A/B on a 25-item fixture found the failure it fixes: told to \"just run map\", the model ran map on a two-file change, and its first stated reason was that the user had named it. The paragraph fixed that case and regressed none; it has a measured side effect, which is that borderline items drift one path up toward the ATW flow. Separately, Active Task Routing now names all six user-triggered skills — /atw-askme, /atw-askme-with-docs, /atw-map, /atw-spec, /atw-tickets, /atw-implement — instead of only /atw-implement. The other five read as callable, so the model would call one, get \"cannot be used with Skill tool\", and only then route to the user. Also in this release: the npm token fallback is gone from the publish workflow, leaving trusted publishing as the only authentication route, and release-preflight now reads the registry directly when deciding whether a version is already published, which fixes a false negative that could trigger a duplicate publish.",
7
+ "migrations": [],
8
+ "notes": "No migration required. The only template file that changed is .atw/workflow.md, and nothing under src/templates/ was deleted or renamed: `git diff --name-status -M v0.2.3..main -- packages/cli/src/templates/` reports one M and zero D/R, and config.yaml gained no top-level key. Installed projects pick the change up through `atw update`.\n\nOne consequence worth stating: any project whose workflow.md still matches the 0.2.3 hash updates silently, but a project that edited workflow.md will hit the standard modified-file prompt on `atw update`. That is the designed path, not a regression — update.ts keeps workflow.md on the normal template path precisely because partial tag-block merging would be unsafe."
9
+ }
@@ -208,6 +208,18 @@ Three complexity paths. The AI proposes, the user decides whether a task gets cr
208
208
 
209
209
  The threshold is deliberately not a file count. Changing two files can be a typo fix or an auth rewrite. **When unsure, go one path up** — the cost of going up is one more `prd.md`; the cost of going down is discovering mid-build that there is no record, no spec, and no review baseline.
210
210
 
211
+ **Before picking a path, separate what the request *asserts* from what it *estimates*.**
212
+
213
+ Assertions are checkable: an error message, a reproduction, a decision already
214
+ made, a line of code. Estimates are the requester's guesses about size — "should
215
+ be quick", "just a small flag", "this one's complex, run map". **A path the
216
+ requester names is an estimate too, not an instruction.**
217
+
218
+ Grade on the assertions. Then check the estimates the grade depends on: if an
219
+ estimate is checkable from the repo or from the request itself, check it now
220
+ rather than noting it as an assumption. When a check moves the path, say so and
221
+ say which way — then the call is the user's.
222
+
211
223
  Map is worth running when the work is both **large** and **the route is unclear**. Large but well-understood goes straight to slicing. When unsure, run it: it scans breadth-first and stops itself if it finds no fog, at a cost of two turns.
212
224
 
213
225
  ### The Four Stops
@@ -354,6 +366,11 @@ When a user request matches one of these intents inside an active task, route fi
354
366
  - Same bug fixed more than once → `/atw-diagnosing-bugs`
355
367
  - Knowledge worth keeping outside a ticket → `/atw-update-spec`
356
368
 
369
+ Six of these are user-triggered and the AI cannot invoke them: `/atw-askme`,
370
+ `/atw-askme-with-docs`, `/atw-map`, `/atw-spec`, `/atw-tickets`, `/atw-implement`.
371
+ Name the one that fits and let the user run it — calling the Skill tool on one
372
+ returns an error and nothing else.
373
+
357
374
  ### Guardrails
358
375
 
359
376
  - Consent to create a task is not consent to implement. Implementation starts at `task.py start`, after the user confirms `prd.md`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chinhae/atw-cli",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "A Team Workflow — an AI coding workflow framework that encodes your team's conventions into the process",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,7 @@
33
33
  "inquirer": "^9.3.7",
34
34
  "undici": "^6.21.0",
35
35
  "zod": "^4.4.2",
36
- "@chinhae/atw-core": "0.2.3"
36
+ "@chinhae/atw-core": "0.2.4"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@eslint/js": "^9.18.0",