@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 +3 -1
- package/package.json +1 -1
- package/src/commands/act.ts +9 -2
- package/src/workbase/opencode-plugin-file.ts +8 -8
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
package/src/commands/act.ts
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
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 = (
|
|
120
|
-
const raw = readFileSync(
|
|
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(
|
|
130
|
-
? basename(dirname(
|
|
131
|
-
: basename(
|
|
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
|
-
|
|
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
|
|
287
|
-
skills.add(skillInfo(
|
|
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
|
})
|