@tacuchi/agent-workflow-cli 21.0.0 → 21.1.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.
Files changed (153) hide show
  1. package/README.md +1 -0
  2. package/dist/application/capability/compose.js +161 -0
  3. package/dist/application/capability/compose.js.map +1 -0
  4. package/dist/application/capability/descriptor-loader.js +109 -0
  5. package/dist/application/capability/descriptor-loader.js.map +1 -0
  6. package/dist/application/capability/design-handler.js +299 -0
  7. package/dist/application/capability/design-handler.js.map +1 -0
  8. package/dist/application/capability/dispatcher.js +312 -0
  9. package/dist/application/capability/dispatcher.js.map +1 -0
  10. package/dist/application/capability/durable-effect.js +220 -0
  11. package/dist/application/capability/durable-effect.js.map +1 -0
  12. package/dist/application/capability/installed-inventory.js +168 -0
  13. package/dist/application/capability/installed-inventory.js.map +1 -0
  14. package/dist/application/capability/readiness.js +204 -0
  15. package/dist/application/capability/readiness.js.map +1 -0
  16. package/dist/application/capability/resolution.js +264 -0
  17. package/dist/application/capability/resolution.js.map +1 -0
  18. package/dist/application/capability/wrapper.js +187 -0
  19. package/dist/application/capability/wrapper.js.map +1 -0
  20. package/dist/application/context/manifest.js +11 -5
  21. package/dist/application/context/manifest.js.map +1 -1
  22. package/dist/application/context/measure.js +5 -2
  23. package/dist/application/context/measure.js.map +1 -1
  24. package/dist/application/context/plan-service.js +6 -6
  25. package/dist/application/context/plan-service.js.map +1 -1
  26. package/dist/application/design/design-bundle-service.js +148 -0
  27. package/dist/application/design/design-bundle-service.js.map +1 -0
  28. package/dist/application/design/design-proposal-service.js +69 -0
  29. package/dist/application/design/design-proposal-service.js.map +1 -0
  30. package/dist/application/design/design-publish-service.js +275 -7
  31. package/dist/application/design/design-publish-service.js.map +1 -1
  32. package/dist/application/design/design-record-service.js +100 -0
  33. package/dist/application/design/design-record-service.js.map +1 -0
  34. package/dist/application/flow/advance.js +533 -0
  35. package/dist/application/flow/advance.js.map +1 -0
  36. package/dist/application/flow/flow-service.js +65 -0
  37. package/dist/application/flow/flow-service.js.map +1 -0
  38. package/dist/application/flow/run-projection.js +80 -0
  39. package/dist/application/flow/run-projection.js.map +1 -0
  40. package/dist/application/flow/run-state-service.js +107 -0
  41. package/dist/application/flow/run-state-service.js.map +1 -0
  42. package/dist/application/flow/submit.js +423 -0
  43. package/dist/application/flow/submit.js.map +1 -0
  44. package/dist/application/resume-service.js +23 -10
  45. package/dist/application/resume-service.js.map +1 -1
  46. package/dist/application/self/install-skill.js +11 -0
  47. package/dist/application/self/install-skill.js.map +1 -1
  48. package/dist/application/self/uninstall.js +21 -0
  49. package/dist/application/self/uninstall.js.map +1 -1
  50. package/dist/application/skills-resolver-service.js +8 -2
  51. package/dist/application/skills-resolver-service.js.map +1 -1
  52. package/dist/application/status-service.js +4 -1
  53. package/dist/application/status-service.js.map +1 -1
  54. package/dist/application/workspace-init-service.js +13 -1
  55. package/dist/application/workspace-init-service.js.map +1 -1
  56. package/dist/cli/commands/capability.js +182 -0
  57. package/dist/cli/commands/capability.js.map +1 -0
  58. package/dist/cli/commands/flow.js +71 -0
  59. package/dist/cli/commands/flow.js.map +1 -0
  60. package/dist/cli/commands/index.js +4 -0
  61. package/dist/cli/commands/index.js.map +1 -1
  62. package/dist/cli/commands/skills.js +55 -2
  63. package/dist/cli/commands/skills.js.map +1 -1
  64. package/dist/cli/commands/status.js +5 -0
  65. package/dist/cli/commands/status.js.map +1 -1
  66. package/dist/cli/help-groups.js +6 -0
  67. package/dist/cli/help-groups.js.map +1 -1
  68. package/dist/cli/parser.js +6 -0
  69. package/dist/cli/parser.js.map +1 -1
  70. package/dist/cli/tui/data/workflow-content.js +5 -0
  71. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  72. package/dist/cli/tui/tabs/workflow-tab.js +5 -1
  73. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  74. package/dist/domain/capability/descriptor.js +553 -0
  75. package/dist/domain/capability/descriptor.js.map +1 -0
  76. package/dist/domain/capability/effects.js +90 -0
  77. package/dist/domain/capability/effects.js.map +1 -0
  78. package/dist/domain/capability/protocol.js +494 -0
  79. package/dist/domain/capability/protocol.js.map +1 -0
  80. package/dist/domain/contract-reader.js +84 -0
  81. package/dist/domain/contract-reader.js.map +1 -0
  82. package/dist/domain/design/adapter.js +161 -0
  83. package/dist/domain/design/adapter.js.map +1 -0
  84. package/dist/domain/design/artifact.js +148 -4
  85. package/dist/domain/design/artifact.js.map +1 -1
  86. package/dist/domain/design/capability.js +263 -4
  87. package/dist/domain/design/capability.js.map +1 -1
  88. package/dist/domain/design/direct.js +108 -0
  89. package/dist/domain/design/direct.js.map +1 -0
  90. package/dist/domain/design/external-send.js +65 -0
  91. package/dist/domain/design/external-send.js.map +1 -0
  92. package/dist/domain/design/maturity.js +71 -0
  93. package/dist/domain/design/maturity.js.map +1 -1
  94. package/dist/domain/design/offline.js +92 -0
  95. package/dist/domain/design/offline.js.map +1 -0
  96. package/dist/domain/design/profiles.js +212 -0
  97. package/dist/domain/design/profiles.js.map +1 -0
  98. package/dist/domain/design/proposal.js +234 -0
  99. package/dist/domain/design/proposal.js.map +1 -0
  100. package/dist/domain/design/render-bundle.js +0 -0
  101. package/dist/domain/design/render-bundle.js.map +1 -0
  102. package/dist/domain/design/rendition.js +472 -0
  103. package/dist/domain/design/rendition.js.map +1 -0
  104. package/dist/domain/design/sources.js +180 -0
  105. package/dist/domain/design/sources.js.map +1 -0
  106. package/dist/domain/design/validation.js +12 -68
  107. package/dist/domain/design/validation.js.map +1 -1
  108. package/dist/domain/design/visual-evidence.js +155 -0
  109. package/dist/domain/design/visual-evidence.js.map +1 -0
  110. package/dist/domain/flow/answer.js +459 -0
  111. package/dist/domain/flow/answer.js.map +1 -0
  112. package/dist/domain/flow/authority.js +2276 -0
  113. package/dist/domain/flow/authority.js.map +1 -0
  114. package/dist/domain/flow/authorization.js +62 -0
  115. package/dist/domain/flow/authorization.js.map +1 -0
  116. package/dist/domain/flow/directive.js +421 -0
  117. package/dist/domain/flow/directive.js.map +1 -0
  118. package/dist/domain/flow/rules.js +140 -0
  119. package/dist/domain/flow/rules.js.map +1 -0
  120. package/dist/domain/flow/run-state.js +317 -0
  121. package/dist/domain/flow/run-state.js.map +1 -0
  122. package/dist/domain/harnesses.js +21 -0
  123. package/dist/domain/harnesses.js.map +1 -1
  124. package/dist/domain/skills.js +13 -14
  125. package/dist/domain/skills.js.map +1 -1
  126. package/package.json +1 -1
  127. package/skills/w/SKILL.md +5 -5
  128. package/skills/w/context/MANIFEST.json +38 -1
  129. package/skills/w/harness/HARNESS.md +20 -0
  130. package/skills/w/loops/CHASSIS.md +11 -20
  131. package/skills/w/loops/CODE-POLICIES.md +9 -15
  132. package/skills/w/loops/plan-exec-loop/LOOP.md +11 -13
  133. package/skills/w/loops/plan-new-loop/LOOP.md +6 -4
  134. package/skills/w/loops/plan-refine-loop/LOOP.md +5 -3
  135. package/skills/w/loops/quick-loop/LOOP.md +18 -26
  136. package/skills/w/loops/spec-refine-loop/LOOP.md +14 -18
  137. package/skills/w/modules/COMPACTION.md +2 -6
  138. package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
  139. package/skills/w/modules/DESIGN-REFERENCES.md +15 -11
  140. package/skills/w/modules/IDEATION-GATE.md +3 -3
  141. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +17 -36
  142. package/skills/w/modules/PLAN-INPUT.md +5 -3
  143. package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
  144. package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
  145. package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
  146. package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
  147. package/skills/w/roles/README.md +2 -0
  148. package/skills/w/roles/design/CONTRACT.md +80 -0
  149. package/skills/w/roles/design/ROLE.md +7 -0
  150. package/skills/w/schemas/capability-descriptor.schema.json +260 -0
  151. package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
  152. package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
  153. package/skills/w/schemas/design/ui-screen.v1.schema.json +29 -1
@@ -0,0 +1,140 @@
1
+ /**
2
+ * The rules that read the registry's declarative fields — thresholds,
3
+ * conditions and the binding of an invocation to a run.
4
+ *
5
+ * They live apart from the table for the same reason the table is a table: the
6
+ * registry says WHAT each transition declares, and this module says what those
7
+ * declarations MEAN. Every function here is pure and takes what it needs as
8
+ * arguments, so a fixture journey exercises exactly the code production walks.
9
+ *
10
+ * Two of them are fail-closed in the direction that costs the least: a condition
11
+ * that cannot be resolved does NOT skip its transition — a registry mistake must
12
+ * make the run ask, never make it drop a step in silence — and an invocation with
13
+ * an unbound placeholder is refused rather than emitted, because a command nobody
14
+ * can run is worse than a boundary that says why it could not be built.
15
+ */
16
+ import { DOCS_BOUNDARY, RUN_PLACEHOLDERS, conditionOf, } from "./authority.js";
17
+ /**
18
+ * Whether a threshold fired, counted over what was actually observed.
19
+ *
20
+ * Only DISTINCT signals the observed row declares are counted: a repeated signal
21
+ * is one observation sent twice, and a signal belonging to another boundary is
22
+ * not this rule's evidence. Both would otherwise let a gate fire on noise.
23
+ */
24
+ export function thresholdFired(rule, journey, observations) {
25
+ const observed = journey.find((decision) => decision.id === rule.observed);
26
+ if (observed === undefined)
27
+ return false;
28
+ // The subset the rule names, intersected with what the row actually declares:
29
+ // a rule may only count signals its observed boundary can produce, so a typo in
30
+ // `of` narrows to nothing instead of counting something else.
31
+ const declaredVocabulary = observed.signals ?? [];
32
+ const counted = rule.of ?? declaredVocabulary;
33
+ const vocabulary = new Set(declaredVocabulary.filter((signal) => counted.includes(signal)));
34
+ const declared = observations
35
+ .filter((observation) => observation.transition === rule.observed)
36
+ .flatMap((observation) => observation.signals)
37
+ .filter((signal) => vocabulary.has(signal));
38
+ return new Set(declared).size >= rule.min;
39
+ }
40
+ /**
41
+ * Why this transition is passed over — or `null` when it happens.
42
+ *
43
+ * The reason travels instead of a bare boolean because the trace has to be able
44
+ * to say what was skipped and why: `applied.length` is the journey's cursor, so a
45
+ * step nobody applied still has to be accounted for, and "it did not happen"
46
+ * without a cause is indistinguishable from a step that was lost.
47
+ */
48
+ export function skipReason(decision, journey, observations) {
49
+ const condition = conditionOf(decision);
50
+ if (condition === null)
51
+ return null;
52
+ // No evidence means the rule did not fire, and a rule that did not fire skips.
53
+ // That is the doctrine's own default — "borderline continues without asking" —
54
+ // and it is the direction that assumes nothing: the alternative would emit a
55
+ // question on zero observations and then read the answer as if it had cause.
56
+ if (thresholdFired(condition.threshold, journey, observations))
57
+ return null;
58
+ return condition.otherwise;
59
+ }
60
+ /**
61
+ * The action as it will be emitted: every placeholder replaced by this run's
62
+ * coordinates.
63
+ *
64
+ * Binding happens before the seal is computed, so what gets sealed, what gets
65
+ * shown and what the result is compared against are the same three strings. A
66
+ * placeholder left over means the registry referenced something this run cannot
67
+ * supply, and that is returned as a failure rather than emitted — `{session}`
68
+ * printed in a command line is the kind of defect that only surfaces when
69
+ * somebody tries to run it.
70
+ */
71
+ export function bindAction(action, binding) {
72
+ // Driven by the closed set, not by two hardcoded replacements: the vocabulary
73
+ // and what it binds to are one decision, and splitting them is how a declared
74
+ // placeholder ends up with nothing replacing it.
75
+ const value = {
76
+ "{session}": binding.session,
77
+ "{code}": binding.code,
78
+ };
79
+ const bind = (text) => RUN_PLACEHOLDERS.reduce((bound, placeholder) => bound.split(placeholder).join(value[placeholder]), text);
80
+ const bound = {
81
+ ...action,
82
+ invocation: {
83
+ ...action.invocation,
84
+ args: action.invocation.args.map(bind),
85
+ target: bind(action.invocation.target),
86
+ input: action.invocation.input === null ? null : bind(action.invocation.input),
87
+ },
88
+ };
89
+ const unbound = unboundPlaceholder(bound);
90
+ return unbound === null ? { ok: true, action: bound } : { ok: false, unbound };
91
+ }
92
+ /**
93
+ * The first placeholder still standing after binding, if any.
94
+ *
95
+ * It looks for the SHAPE, not only the two known names: `{sesion}` is a typo that
96
+ * binds to nothing, and reporting it as "unbound" beats emitting a command with a
97
+ * brace in it. The stdin payload is exempt — a JSON body legitimately carries
98
+ * braces, and refusing those would make the field unusable.
99
+ */
100
+ const PLACEHOLDER_SHAPE = /\{[a-z_-]+\}/;
101
+ function unboundPlaceholder(action) {
102
+ const parts = [action.invocation.program, ...action.invocation.args, action.invocation.target];
103
+ for (const part of parts) {
104
+ const found = PLACEHOLDER_SHAPE.exec(part);
105
+ if (found !== null)
106
+ return found[0];
107
+ }
108
+ return null;
109
+ }
110
+ /** Any `docs/<folder>` a string names, wherever inside it the path appears. */
111
+ const DOCS_PATH = /(?:^|[\s"'=(,])(docs\/[A-Za-z0-9._-]+)/g;
112
+ /**
113
+ * The `docs/` folder this action would write and this flow may not — or `null`.
114
+ *
115
+ * The chassis' hard rule is "no auto-export": a loop writes its own flow's
116
+ * document and nothing else, and promoting anything into another `docs/` folder
117
+ * is a separate, explicit step. Stated only in prose, the rule could be broken by
118
+ * a single registry row naming the wrong path, and the breach would be invisible
119
+ * until a run had already written outside its lane.
120
+ *
121
+ * Checked over the WHOLE invocation, not only its `target`: the path a command
122
+ * writes usually rides in an argument, and a boundary that inspected only the
123
+ * target would pass `aw export-manuals --out docs/manuals` with a target of `.`.
124
+ * Reading is not the concern — this is about what a delegated step may WRITE —
125
+ * but an action that only reads a foreign `docs/` folder has no reason to name it
126
+ * either, and refusing is the direction that costs a registry edit instead of an
127
+ * unauthorized write.
128
+ */
129
+ export function docsBoundaryBreach(action, flow) {
130
+ const allowed = DOCS_BOUNDARY[flow];
131
+ const parts = [...action.invocation.args, action.invocation.target];
132
+ for (const part of parts) {
133
+ for (const [, path] of part.matchAll(DOCS_PATH)) {
134
+ if (path !== undefined && !allowed.includes(path))
135
+ return path;
136
+ }
137
+ }
138
+ return null;
139
+ }
140
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/domain/flow/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ /**
2
+ * The run's state, owned by the CLI — and the reason it can be trusted.
3
+ *
4
+ * A flow run stops at boundaries and is picked up later, possibly from another
5
+ * host, with the original conversation gone. What survives that is this file:
6
+ * which flow, which transitions were already applied, which boundary is in
7
+ * force, what was authorized, and the attempt history that tells a resend apart
8
+ * from a new attempt.
9
+ *
10
+ * It is sealed with the SAME canonicalization the rest of the system uses
11
+ * (`canonicalJson` / `semanticDigest`) rather than a second digest criterion —
12
+ * two digests over the same bytes is exactly how a "tampered" verdict becomes
13
+ * unfalsifiable.
14
+ *
15
+ * Reading is **fail-closed** and the four verdicts are deliberately distinct: an
16
+ * ABSENT state in an open session is a LEGACY session, not corruption, and its
17
+ * answer is an adoption action; an unknown version, invalid JSON or a digest
18
+ * that does not match are refusals with a repair action. None of them advances.
19
+ *
20
+ * The human artifacts (`SESSION.md`, `CHECKPOINT.md`, `BACKLOG.md`) are not
21
+ * touched by any of this: they keep their headings and their role as the run's
22
+ * readable log.
23
+ */
24
+ import { WORKLINE_FLOWS } from "../../application/capability/compose.js";
25
+ import { canonicalJson, semanticDigest } from "../../application/semantic-operation/protocol.js";
26
+ import { isEffectClass } from "../capability/effects.js";
27
+ export const FLOW_RUN_STATE_VERSION = 4;
28
+ /** The CLI-owned run state inside the session folder. Machine-local, dotted. */
29
+ export const FLOW_RUN_STATE_FILE = ".flow-run.json";
30
+ /**
31
+ * How many times one boundary may be answered before the run degrades it.
32
+ *
33
+ * The chassis states the rule without a number ("`attempts[gap]++`, `MAX` cap")
34
+ * because the number is not doctrine — what is doctrine is that a gap must not
35
+ * be re-fired forever. Three is the smallest cap that still allows a genuine
36
+ * correction: a first answer, a fix after reading why it was refused, and one
37
+ * more. The fourth would be the loop the rule exists to prevent.
38
+ */
39
+ export const MAX_BOUNDARY_ATTEMPTS = 3;
40
+ /** How many attempts this run has already spent on one transition. */
41
+ export function attemptsAt(state, transition) {
42
+ return state.attempts.filter((attempt) => attempt.transition === transition).length;
43
+ }
44
+ /**
45
+ * The seal of everything an answer was written AGAINST — attempts excluded.
46
+ *
47
+ * Not a second digest criterion: the same canonicalization over a deliberately
48
+ * narrower input, declared once, here. `digest` seals the file so tampering is
49
+ * detectable and must therefore cover every field. Staleness asks a different
50
+ * question — "did what this answer depends on move?" — and a failed attempt that
51
+ * was recorded moves nothing it depends on: same position, same boundary, same
52
+ * action, same effects. Sealing the attempts into it would report the caller's
53
+ * own previous refusal back to them as `FLOW_ANSWER_STALE`, replacing a precise
54
+ * reason ("this evidence is missing") with a vague one.
55
+ */
56
+ export function positionDigest(state) {
57
+ const { attempts: _spent, digest: _seal, ...position } = state;
58
+ return semanticDigest(position);
59
+ }
60
+ /** The state minus its own seal — exactly what {@link sealRunState} digests. */
61
+ function withoutSeal(state) {
62
+ const { digest: _seal, ...rest } = state;
63
+ return rest;
64
+ }
65
+ export function sealRunState(state) {
66
+ return { ...state, digest: semanticDigest(state) };
67
+ }
68
+ export function newRunState(flow, session) {
69
+ return sealRunState({
70
+ version: FLOW_RUN_STATE_VERSION,
71
+ flow,
72
+ session,
73
+ applied: [],
74
+ skipped: [],
75
+ boundary: null,
76
+ pending_action: null,
77
+ observations: [],
78
+ authorizations: [],
79
+ effects: { planned: [], approved: [], applied: [] },
80
+ attempts: [],
81
+ });
82
+ }
83
+ /**
84
+ * Apply one transition, re-sealing the result.
85
+ *
86
+ * Pure on purpose: the atomic write is the service's job, and keeping the state
87
+ * transition free of I/O is what makes "a failure halfway through leaves no
88
+ * intermediate state applied" checkable — the next state either exists whole or
89
+ * was never produced.
90
+ */
91
+ export function applyTransition(state, decisionId, effects = []) {
92
+ return sealRunState({
93
+ ...withoutSeal(state),
94
+ applied: [...state.applied, decisionId],
95
+ // planned before applied, always: an effect that shows up as applied without
96
+ // ever having been planned is the lie `buildReceipt` refuses, and the
97
+ // directive refuses it too.
98
+ effects: {
99
+ planned: union(state.effects.planned, effects),
100
+ approved: [...state.effects.approved],
101
+ applied: union(state.effects.applied, effects),
102
+ },
103
+ });
104
+ }
105
+ /**
106
+ * Pass over a conditional transition without applying it.
107
+ *
108
+ * The cursor advances — the journey is a sequence and the run has to leave the
109
+ * step behind — but nothing else moves: no effect is planned, none is applied,
110
+ * and the id lands in `skipped` so the trace can say the step was omitted rather
111
+ * than decided. A skip that only advanced the cursor would be indistinguishable
112
+ * from having applied it, which is the exact lie a conditional step invites.
113
+ */
114
+ export function skipTransition(state, decisionId) {
115
+ return sealRunState({
116
+ ...withoutSeal(state),
117
+ applied: [...state.applied, decisionId],
118
+ skipped: [...state.skipped, decisionId],
119
+ });
120
+ }
121
+ /** Move the boundary to where the walk stopped, applying nothing. */
122
+ export function withBoundary(state, boundary) {
123
+ return sealRunState({ ...withoutSeal(state), boundary });
124
+ }
125
+ /**
126
+ * Record — or clear — the delegated action the run is waiting on.
127
+ *
128
+ * Clearing is as load-bearing as setting: a run that moved past an execution
129
+ * boundary and kept the old pending action would tell whoever resumes it to run
130
+ * something the engine no longer expects.
131
+ */
132
+ export function withPendingAction(state, pending) {
133
+ return sealRunState({ ...withoutSeal(state), pending_action: pending });
134
+ }
135
+ /** Keep a validated observation for the rule that consumes it later. */
136
+ export function withObservation(state, observation) {
137
+ return sealRunState({
138
+ ...withoutSeal(state),
139
+ observations: [
140
+ ...state.observations.filter((past) => past.transition !== observation.transition),
141
+ observation,
142
+ ],
143
+ });
144
+ }
145
+ /** Record one attempt in the persisted history, re-sealing the result. */
146
+ export function withAttempt(state, attempt) {
147
+ return sealRunState({ ...withoutSeal(state), attempts: [...state.attempts, attempt] });
148
+ }
149
+ /**
150
+ * Grant the run an authorization the person just gave.
151
+ *
152
+ * The classes land in BOTH `authorizations` — what the run may exercise from here
153
+ * on — and `effects.approved` — the ledger moment. The two are the same split the
154
+ * capability contract already makes between the request's authorizations and the
155
+ * receipt's approved effects, and the directive enforces `approved ⊆ authorizations`.
156
+ */
157
+ export function withApproval(state, effects) {
158
+ return sealRunState({
159
+ ...withoutSeal(state),
160
+ authorizations: union(state.authorizations, effects),
161
+ effects: {
162
+ planned: union(state.effects.planned, effects),
163
+ approved: union(state.effects.approved, effects),
164
+ applied: [...state.effects.applied],
165
+ },
166
+ });
167
+ }
168
+ function union(current, added) {
169
+ return [...new Set([...current, ...added])];
170
+ }
171
+ /**
172
+ * Parse a persisted state, refusing anything that cannot be trusted.
173
+ *
174
+ * Order matters: shape before version before seal. A file whose version is
175
+ * unknown must not be judged by a digest rule that version may not even use.
176
+ */
177
+ export function parseRunState(raw) {
178
+ if (raw.trim().length === 0) {
179
+ return refuse("FLOW_RUN_INVALID", "el estado de corrida está vacío", "reconstruí la corrida con 'aw flow advance --adopt', o restaurá el archivo");
180
+ }
181
+ let parsed;
182
+ try {
183
+ parsed = JSON.parse(raw);
184
+ }
185
+ catch {
186
+ return refuse("FLOW_RUN_INVALID", "el estado de corrida no es JSON válido", "no se avanza sobre un estado ilegible: restauralo o re-adoptá la sesión con 'aw flow advance --adopt'");
187
+ }
188
+ if (!isRecord(parsed)) {
189
+ return refuse("FLOW_RUN_INVALID", "el estado de corrida no es un objeto JSON", "restauralo o re-adoptá la sesión con 'aw flow advance --adopt'");
190
+ }
191
+ if (parsed.version !== FLOW_RUN_STATE_VERSION) {
192
+ // No silent migration, in either direction: an older state predates fields
193
+ // the engine now reads, and inventing them would fabricate the very history
194
+ // this file exists to make trustworthy. Re-adoption is explicit and cheap.
195
+ return refuse("FLOW_RUN_VERSION_UNSUPPORTED", `versión de estado de corrida no soportada: ${String(parsed.version)}`, `esta versión del CLI lee la ${FLOW_RUN_STATE_VERSION}: actualizá el CLI, o re-adoptá la sesión con 'aw flow advance --flow <flow> --adopt' (no hay migración automática)`);
196
+ }
197
+ const shape = checkShape(parsed);
198
+ if (shape !== null)
199
+ return { ok: false, failure: shape };
200
+ const state = parsed;
201
+ if (semanticDigest(withoutSeal(state)) !== state.digest) {
202
+ return refuse("FLOW_RUN_TAMPERED", "el estado de corrida no coincide con su propio sello", "fue editado fuera del CLI: descartá el archivo y re-adoptá la sesión con 'aw flow advance --adopt'");
203
+ }
204
+ return { ok: true, state };
205
+ }
206
+ export function serializeRunState(state) {
207
+ return `${canonicalJson(state)}\n`;
208
+ }
209
+ /**
210
+ * Whether the persisted state is coherent with the journey it claims to walk.
211
+ *
212
+ * A state can be well-formed and sealed and still be AHEAD of the journey — it
213
+ * names transitions this build does not know, or in an order the journey does
214
+ * not have. Advancing over it would apply transitions on top of a history
215
+ * nobody can reproduce, so it is refused with the same fail-closed rule.
216
+ */
217
+ export function checkAgainstJourney(state, journey) {
218
+ const ids = journey.map((decision) => decision.id);
219
+ for (const [index, applied] of state.applied.entries()) {
220
+ if (ids[index] === applied)
221
+ continue;
222
+ return {
223
+ code: "FLOW_RUN_AHEAD_OF_JOURNEY",
224
+ message: `el estado dice haber aplicado '${applied}' donde el recorrido tiene '${ids[index] ?? "(nada)"}'`,
225
+ action: "el estado no corresponde a este recorrido: revisá el flow de la corrida o re-adoptá la sesión",
226
+ };
227
+ }
228
+ const next = ids[state.applied.length] ?? null;
229
+ if (state.boundary !== null && state.boundary !== next) {
230
+ return {
231
+ code: "FLOW_RUN_AHEAD_OF_JOURNEY",
232
+ message: `la frontera vigente dice '${state.boundary}' y el recorrido sigue en '${next ?? "(nada)"}'`,
233
+ action: "recalculá la frontera avanzando de nuevo; no se responde sobre una frontera que el estado no sostiene",
234
+ };
235
+ }
236
+ return null;
237
+ }
238
+ function checkShape(parsed) {
239
+ const invalid = (why) => ({
240
+ code: "FLOW_RUN_INVALID",
241
+ message: `el estado de corrida ${why}`,
242
+ action: "restauralo o re-adoptá la sesión con 'aw flow advance --adopt'",
243
+ });
244
+ if (!WORKLINE_FLOWS.includes(parsed.flow)) {
245
+ return invalid(`declara un flow desconocido: ${String(parsed.flow)}`);
246
+ }
247
+ if (typeof parsed.session !== "string" || parsed.session.trim().length === 0) {
248
+ return invalid("no dice a qué sesión pertenece");
249
+ }
250
+ const applied = parsed.applied;
251
+ if (!isStringArray(applied))
252
+ return invalid("no trae la lista de transiciones aplicadas");
253
+ if (!isStringArray(parsed.skipped))
254
+ return invalid("no trae la lista de transiciones omitidas");
255
+ if (parsed.skipped.some((id) => !applied.includes(id))) {
256
+ return invalid("declara una transición omitida que el recorrido nunca pasó");
257
+ }
258
+ if (parsed.boundary !== null && typeof parsed.boundary !== "string") {
259
+ return invalid("declara una frontera que no es un identificador");
260
+ }
261
+ if (!isPendingAction(parsed.pending_action)) {
262
+ return invalid("declara una acción pendiente sin transición o sin sello");
263
+ }
264
+ if (!isObservationArray(parsed.observations)) {
265
+ return invalid("trae observaciones que no son señales declaradas por transición");
266
+ }
267
+ if (!isEffectClassArray(parsed.authorizations)) {
268
+ return invalid("declara autorizaciones que no son clases de efecto");
269
+ }
270
+ if (!isEffectLedger(parsed.effects))
271
+ return invalid("no trae el registro de efectos completo");
272
+ if (!isAttemptArray(parsed.attempts))
273
+ return invalid("trae un historial de intentos inválido");
274
+ if (typeof parsed.digest !== "string")
275
+ return invalid("no trae su sello");
276
+ return null;
277
+ }
278
+ function refuse(code, message, action) {
279
+ return { ok: false, failure: { code, message, action } };
280
+ }
281
+ function isRecord(value) {
282
+ return typeof value === "object" && value !== null && !Array.isArray(value);
283
+ }
284
+ function isStringArray(value) {
285
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
286
+ }
287
+ function isEffectClassArray(value) {
288
+ return Array.isArray(value) && value.every(isEffectClass);
289
+ }
290
+ function isEffectLedger(value) {
291
+ if (!isRecord(value))
292
+ return false;
293
+ return (isEffectClassArray(value.planned) &&
294
+ isEffectClassArray(value.approved) &&
295
+ isEffectClassArray(value.applied));
296
+ }
297
+ function isPendingAction(value) {
298
+ if (value === null)
299
+ return true;
300
+ return (isRecord(value) && typeof value.transition === "string" && typeof value.digest === "string");
301
+ }
302
+ function isObservationArray(value) {
303
+ if (!Array.isArray(value))
304
+ return false;
305
+ return value.every((entry) => isRecord(entry) && typeof entry.transition === "string" && isStringArray(entry.signals));
306
+ }
307
+ function isAttemptArray(value) {
308
+ if (!Array.isArray(value))
309
+ return false;
310
+ return value.every((entry) => isRecord(entry) &&
311
+ typeof entry.invocation_id === "string" &&
312
+ Number.isInteger(entry.attempt) &&
313
+ typeof entry.request_digest === "string" &&
314
+ typeof entry.transition === "string" &&
315
+ (entry.parent_request_digest === null || typeof entry.parent_request_digest === "string"));
316
+ }
317
+ //# sourceMappingURL=run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../../src/domain/flow/run-state.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  import { HOST_VERIFICATIONS } from "./host-verification.js";
2
+ /** The mention form every host that auto-discovers skills by description shares. */
3
+ const MENTION = {
4
+ kind: "mention",
5
+ template: "<name>",
6
+ note: "las skills se activan por su description: se nombra la capacidad en la conversación",
7
+ };
2
8
  export const HARNESSES = [
3
9
  {
4
10
  id: "claude-code",
@@ -20,6 +26,7 @@ export const HARNESSES = [
20
26
  pluginHooksDir: "hooks",
21
27
  skillsDirs: [".claude/skills"],
22
28
  installTarget: "claude",
29
+ invocation: MENTION,
23
30
  },
24
31
  {
25
32
  id: "codex",
@@ -50,6 +57,7 @@ export const HARNESSES = [
50
57
  // secondary for older builds. Verified vs developers.openai.com/codex/skills.
51
58
  skillsDirs: [".agents/skills", ".codex/skills"],
52
59
  installTarget: "codex",
60
+ invocation: MENTION,
53
61
  },
54
62
  {
55
63
  // Detection: OZ_RUN_ID takes priority over warp markers to handle overlap.
@@ -73,6 +81,7 @@ export const HARNESSES = [
73
81
  pluginHooksDir: null,
74
82
  skillsDirs: [".agents/skills"],
75
83
  installTarget: "oz",
84
+ invocation: MENTION,
76
85
  },
77
86
  {
78
87
  id: "warp",
@@ -104,6 +113,7 @@ export const HARNESSES = [
104
113
  // (skill-as-command). See install-skill.ts:synthesizeCommandSkills.
105
114
  skillsDirs: [".warp/skills", ".agents/skills", ".claude/skills", ".codex/skills"],
106
115
  installTarget: "warp",
116
+ invocation: MENTION,
107
117
  },
108
118
  {
109
119
  // Gemini CLI (deprecated mid-2026) + Antigravity CLI (`agy`, successor;
@@ -143,6 +153,7 @@ export const HARNESSES = [
143
153
  pluginHooksDir: null, // Extension-bundled hooks (BeforeTool) — Phase 2
144
154
  skillsDirs: [".agents/skills", ".gemini/skills"],
145
155
  installTarget: "gemini",
156
+ invocation: MENTION,
146
157
  },
147
158
  {
148
159
  // OpenCode (sst/opencode). Config `opencode.json` ($schema); MCP under `mcp`
@@ -167,6 +178,7 @@ export const HARNESSES = [
167
178
  pluginHooksDir: null,
168
179
  skillsDirs: [".opencode/skills", ".agents/skills", ".claude/skills"],
169
180
  installTarget: "opencode",
181
+ invocation: MENTION,
170
182
  },
171
183
  {
172
184
  // Crush (charmbracelet/crush). Config `crush.json` ($schema charm.land/crush.json);
@@ -202,6 +214,7 @@ export const HARNESSES = [
202
214
  ".claude/skills",
203
215
  ],
204
216
  installTarget: "crush",
217
+ invocation: MENTION,
205
218
  },
206
219
  {
207
220
  // Kimi Code (MoonshotAI) — successor of the Python `kimi-cli`, shipped as a
@@ -242,6 +255,14 @@ export const HARNESSES = [
242
255
  pluginHooksDir: null, // Its hooks live in config.toml, not in a plugin dir.
243
256
  skillsDirs: [".kimi-code/skills", ".agents/skills"],
244
257
  installTarget: "kimi",
258
+ // The one host with a VERIFIED typed form: a skill dropped in
259
+ // ~/.agents/skills was listed and invoked this way (probe 2026-07-29, the
260
+ // same one `COMMAND_SKILLS_HOSTS` rests on).
261
+ invocation: {
262
+ kind: "slash",
263
+ template: "/skill:<name>",
264
+ note: "probe 2026-07-29: las skills SON la superficie de comandos de Kimi Code",
265
+ },
245
266
  },
246
267
  ];
247
268
  /** Hosts that auto-discover skills from the open-standard `~/.agents/skills`. */
@@ -1 +1 @@
1
- {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"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"}
@@ -26,20 +26,19 @@ const ROLE_SET = new Set(SKILL_ROLES);
26
26
  export function isSkillRole(value) {
27
27
  return ROLE_SET.has(value);
28
28
  }
29
- /**
30
- * Names this contract does NOT accept, and what to say instead.
31
- *
32
- * `ui-design` was the design role and `ui-spec` its default implementation.
33
- * Both are retired: the public identity is `design`, and its only output is the
34
- * UI Design Package v1. They are not aliases and not alternative implementations
35
- * — a second name for one capability is a second contract in disguise, and the
36
- * day the two disagree there is no way to say which one the package obeys.
37
- *
38
- * So a config naming either is REFUSED, not silently honored: accepting
39
- * `design = "ui-spec"` would make `ui-spec` an accepted name, which is exactly
40
- * what the contract forbids. The role keeps its built-in default, so refusing
41
- * the binding never leaves the capability mute.
42
- */
29
+ export function classifyCapabilityBinding(resolved, canonicalName) {
30
+ if (!resolved.enabled || resolved.skill === null) {
31
+ return { state: "off", reason: `'${resolved.role}' está en off`, action: null };
32
+ }
33
+ if (resolved.skill === canonicalName) {
34
+ return { state: "floor_and_improvements", reason: null, action: null };
35
+ }
36
+ return {
37
+ state: "misconfigured",
38
+ reason: `'${resolved.role}' apunta a '${resolved.skill}', y un binding de reemplazo no selecciona una mejora`,
39
+ action: `dejá el binding sin declarar, ponelo en '${canonicalName}' o desactivalo con "off"`,
40
+ };
41
+ }
43
42
  export const RETIRED_SKILL_IDENTITIES = new Map([
44
43
  [
45
44
  "ui-design",
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAIjG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAA8B;IAC/D,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC;AAcF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAgC,IAAI,GAAG,CAAC;IAC3E;QACE,WAAW;QACX,2FAA2F;KAC5F;IACD;QACE,SAAS;QACT,uGAAuG;KACxG;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAIjG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAA8B;IAC/D,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC;AAcF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AA+CD,MAAM,UAAU,yBAAyB,CACvC,QAAuB,EACvB,aAAqB;IAErB,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IACD,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,eAAe,QAAQ,CAAC,KAAK,uDAAuD;QAC7G,MAAM,EAAE,4CAA4C,aAAa,2BAA2B;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAgC,IAAI,GAAG,CAAC;IAC3E;QACE,WAAW;QACX,2FAA2F;KAC5F;IACD;QACE,SAAS;QACT,uGAAuG;KACxG;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "21.0.0",
3
+ "version": "21.1.0",
4
4
  "description": "Runtime CLI for Workline — the stages + loops + artifacts system for agent work. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, persist, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
5
5
  "type": "module",
6
6
  "bin": {