@markjaquith/agency 3.9.4 → 3.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -568,7 +568,9 @@ of non-archived tasks and phases. When run inside an epic, task, phase, or one o
568
568
  its checkout descendants, it opens that item's actions first; Escape returns to
569
569
  Workstream, where **Tab** reaches global Workbase actions. `agency .` is shorthand
570
570
  for `agency act .` and explicitly focuses the item containing the current path.
571
- Otherwise, select an item to see its available actions.
571
+ Otherwise, select an item to see its available actions. After an action,
572
+ Agency reloads the graph and returns to Workstream so changed items and available
573
+ actions are current, and archived items no longer appear.
572
574
  Press **Tab** to cycle to **Workbase** for workbase actions. Both tabs have a blank
573
575
  row above a chevron-prefixed filter with the placeholder “type to filter”.
574
576
  Each tab remembers its filter and selection. The active
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markjaquith/agency",
3
- "version": "3.9.4",
3
+ "version": "3.9.6",
4
4
  "description": "Manage agentic work across repositories with durable workbases",
5
5
  "keywords": [
6
6
  "agents",
@@ -222,6 +222,7 @@ export const act = (
222
222
  Effect.tap(() =>
223
223
  Effect.sync(() => {
224
224
  state.goal = undefined
225
+ state.item = undefined
225
226
  }),
226
227
  ),
227
228
  Effect.as(true),
@@ -240,7 +241,12 @@ export const act = (
240
241
  return Effect.succeed(true)
241
242
  }),
242
243
  )
243
- if (!state.native || !keepGoing || state.session?.quitRequested) break
244
+ if (
245
+ (!state.native && options.exitOnEscape !== false) ||
246
+ !keepGoing ||
247
+ state.session?.quitRequested
248
+ )
249
+ break
244
250
  state.session?.resetCancellation()
245
251
  if (state.session?.takeNavigation()) {
246
252
  state.item = undefined
@@ -668,7 +674,8 @@ Usage: agency act [<directory-or-task-id> | --epic <id> | --task <id> [--phase <
668
674
 
669
675
  Choose a task/phase in Workstream, or press Tab for Workbase actions. Guided
670
676
  creation offers an explicit Work choice afterward; creation alone never starts work.
671
- Item actions stay on that item. Escape clears input, then steps back through
677
+ Completed item actions return to a freshly loaded Workstream. Escape clears input,
678
+ then steps back through
672
679
  wizard prompts, the action menu, and Workstream,
673
680
  or exits from the front screen; Ctrl-C quits. A recap is printed when you exit.
674
681
  An existing directory or file selects its containing epic, task, or phase.
@@ -116,8 +116,8 @@ const unquote = (value: string) => {
116
116
  return trimmed
117
117
  }
118
118
 
119
- const skillInfo = (location: string) => {
120
- const raw = readFileSync(location, "utf8")
119
+ const skillInfo = (path: string) => {
120
+ const raw = readFileSync(path, "utf8")
121
121
  const match = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/)
122
122
  const frontmatter = match?.[1] ?? ""
123
123
  const scalar = (name: string) => {
@@ -126,15 +126,15 @@ const skillInfo = (location: string) => {
126
126
  ))?.[1]
127
127
  return value ? unquote(value) : undefined
128
128
  }
129
- const id = basename(location) === "SKILL.md"
130
- ? basename(dirname(location))
131
- : basename(location, extname(location))
129
+ const id = basename(path) === "SKILL.md"
130
+ ? basename(dirname(path))
131
+ : basename(path, extname(path))
132
132
  const description = scalar("description")
133
133
  return {
134
134
  id,
135
135
  name: scalar("name") ?? id,
136
136
  ...(description === undefined ? {} : { description }),
137
- location,
137
+ path,
138
138
  content: match ? raw.slice(match[0].length) : raw,
139
139
  }
140
140
  }
@@ -283,8 +283,8 @@ const setup = async (context: V2PluginContext) => {
283
283
  )
284
284
  await context.skill.transform((skills) => {
285
285
  for (const path of paths) {
286
- for (const location of skillFiles(path)) {
287
- skills.add(skillInfo(location) as unknown as Parameters<typeof skills.add>[0])
286
+ for (const skillPath of skillFiles(path)) {
287
+ skills.add(skillInfo(skillPath) as unknown as Parameters<typeof skills.add>[0])
288
288
  }
289
289
  }
290
290
  })