@execuro-sw-ecosystem/sw-ecosystem-agentic-harness 0.1.11 → 0.1.13
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/CHANGELOG.md +35 -0
- package/README.md +18 -8
- package/agents/sw-product-manager.md +9 -3
- package/agents/sw-shopware-architect.md +5 -1
- package/agents/sw-tender-editor.md +34 -19
- package/bin/cli.mjs +10 -4
- package/codex/agents/sw-product-manager.toml +9 -3
- package/codex/agents/sw-shopware-architect.toml +6 -2
- package/codex/agents/sw-tender-editor.toml +34 -19
- package/content/AGENTS.md +3 -3
- package/copilot/agents/sw-product-manager.agent.md +9 -3
- package/copilot/agents/sw-shopware-architect.agent.md +6 -2
- package/copilot/agents/sw-tender-editor.agent.md +35 -20
- package/lib/commands.mjs +80 -18
- package/lib/guide.mjs +14 -6
- package/lib/settings.mjs +77 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/sw-discover-tender/SKILL.md +39 -43
- package/skills/sw-discover-tender/reference/agent-briefs.md +65 -110
- package/skills/sw-discover-tender/reference/analysis-template.md +41 -208
- package/skills/sw-discover-tender/reference/assumption-catalogue.md +69 -104
- package/skills/sw-discover-tender/reference/client-question-rules.md +16 -35
- package/skills/sw-discover-tender/reference/context-parameters.md +14 -107
- package/skills/sw-discover-tender/reference/coverage-mapping.md +33 -56
- package/skills/sw-discover-tender/reference/editor-session.md +32 -73
- package/skills/sw-discover-tender/reference/estimation-model.md +43 -79
- package/skills/sw-discover-tender/reference/procedure.md +36 -72
- package/skills/sw-discover-tender/reference/project-information.md +31 -0
- package/skills/sw-discover-tender/reference/response-rules.md +11 -10
- package/skills/sw-setup/SKILL.md +6 -7
- package/skills/sw-setup/reference/rows.md +27 -17
- package/skills/sw-discover-tender/reference/confidence-rubric.md +0 -80
- package/skills/sw-discover-tender/reference/editor-mode.md +0 -11
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Export rules
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The runtime's `export` command applies these; this file is the reference an agent or the operator checks a result against. No agent writes an export file — export is a runtime command / API call, and there is no per-cluster CSV of any kind.
|
|
4
4
|
|
|
5
|
-
- **
|
|
6
|
-
- **
|
|
7
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
5
|
+
- **X-1** Available anytime. Unconfirmed scope items export with empty answer cells.
|
|
6
|
+
- **X-2** XLSX input: `<source basename>-response-v<n>.xlsx` (X-9), a copy of the client's own workbook. The original is never modified. `export` refuses while any exported table lacks its coverage-to-client-token map, listing the tables (by their `<sheet> r<headerRow>` key) — map them first (`coverage-mapping.md`, `procedure.md` step 7).
|
|
7
|
+
- **X-3** Fit-back by item pointer: export resolves each item via the committed fit-back map (`import-map.json`, `<srcdir>/<base>/import-map.json`) — `items[id].table` names the table, `items[id].row` the row — and writes the mapped compliance token, the Client Response and the effort into the client's own columns at that row. An item with no pointer is reported as `not written: <id> (no source row)`, never silently dropped. The coverage-to-client-token map is decided agentically at export, not at intake (`coverage-mapping.md`), and stored per table key for later exports of the same document. Accepted assumptions go into the mapped assumptions column when a table named one; otherwise they follow the Client Response as bullets in the same cell. No column is added.
|
|
8
|
+
- **X-4** Surgical write: only the written cells change; every other part of the workbook is copied byte-for-byte; Excel recalculates on open. No library that re-serialises the workbook.
|
|
9
|
+
- **X-5** CSV or PDF input: no fit-back map — `<source basename>-response-v<n>.xlsx` (X-9) built as the tool's own workbook mirroring the working sheet's own tabs in page order: `Overview` (regime, totals by priority and by tab, readiness counts), `Project information` (`Parameter · Value · Source`), `Functional`/`Non-functional`/`Project & services` (always present, columns `ID · Topic · Requirement · Requirement Coverage (the six values as-is) · Estimation · Client Response · Assumptions`, answer cells filled for confirmed items only), `Integrations`, `Glossary`; `Log` and References are never exported.
|
|
10
|
+
- **X-6** The page shows each scope item's exact exported text before it is confirmed, for every item, confirmed or not.
|
|
11
|
+
- **X-7** The tool writes no cost, price, rate, licence fee or budget of its own — see `estimation-model.md`'s money rule for the exact word list, the `cost:` exemption and scope. Project information keeps the client's or the operator's own figure verbatim; a `cost:` reference is never exported.
|
|
12
|
+
- **X-9** Numbered exports: every export writes `<base>-response-v<n>.xlsx`, `n` the next free number — an existing file, and an explicit `--out` that already exists, are never overwritten. Each export appends a section 8 Log line: `- <date> · export v<n> · <file> · confirmed <c>/<n> · changed since v<n-1>: <k>`. "Changed since last export" is the set of confirmed items whose exported text differs from the last export's snapshot, or that are newly confirmed since then; it is shown in the CLI export output, in the section 8 line, and as a page filter.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
Unproven in the XLSX writer, per the task 3 POC: conditional formatting, print area, over-wide or x14 validation, tables, pre-filled answer cells, desktop Excel, Google Sheets.
|
package/skills/sw-setup/SKILL.md
CHANGED
|
@@ -50,10 +50,9 @@ npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@latest status --json
|
|
|
50
50
|
|
|
51
51
|
`--json` is mandatory for every call this skill makes: without it the CLI
|
|
52
52
|
prints a human summary, not the object below. It prints one JSON object
|
|
53
|
-
(`ok`, `next_step`, `help`,
|
|
54
|
-
|
|
55
|
-
environment row's check from `reference/rows.md`
|
|
56
|
-
read-only, seconds each: file/directory existence, one version command, one
|
|
53
|
+
(`ok`, `next_step`, `help`, `targets`, `agents[]`, `drift[]`). First settle
|
|
54
|
+
the target agents (`reference/rows.md`, Target agents); alongside, run every
|
|
55
|
+
environment row's check from `reference/rows.md` — read-only, seconds each: file/directory existence, one version command, one
|
|
57
56
|
`kb_status` call, one `npm view` registry lookup (Package updates row) — the
|
|
58
57
|
one part of step 1 that touches the network, so it is the slow part.
|
|
59
58
|
Never write, never install, never ask a question in this step.
|
|
@@ -74,7 +73,8 @@ one line per configuration item the CLI's `agents[]`/`drift[]` reports:
|
|
|
74
73
|
- [x] Plugin tests — AhCheckout: phpunit + jest ok
|
|
75
74
|
- [ ] Project wiki — docs/project-wiki/ missing
|
|
76
75
|
- [ ] Package updates — harness 0.1.0 → 0.1.3
|
|
77
|
-
- [
|
|
76
|
+
- [x] Target agents — claude-code (anchored)
|
|
77
|
+
- [ ] Installer config — .mcp.json entry: drift
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
Per-plugin rows print one line per directory under `custom/plugins/`, e.g.
|
|
@@ -87,8 +87,7 @@ Print one closing line: `Environment ready.` Stop. No question.
|
|
|
87
87
|
### 3. Missing rows
|
|
88
88
|
|
|
89
89
|
For a missing environment row, research only what it needs: the guideline
|
|
90
|
-
sections `reference/rows.md` cites for that row
|
|
91
|
-
(`shopware-project-qa-guidelines.md` §3.3–§3.7, §6.1), `compose.yaml` for the
|
|
90
|
+
sections `reference/rows.md` cites for that row, `compose.yaml` for the
|
|
92
91
|
service name, `custom/plugins/*` names for per-plugin rows.
|
|
93
92
|
|
|
94
93
|
For a missing/drifted configuration row, do not research or plan the fix
|
|
@@ -11,16 +11,25 @@ Every installer-CLI call this skill makes passes `--json`. Without it the CLI
|
|
|
11
11
|
prints a short human summary instead of the object these rows read — that
|
|
12
12
|
summary is for the person typing the command, never for a skill parsing it.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
## Target agents
|
|
15
|
+
|
|
16
|
+
Every row below is judged against the **anchored target agents** only, never
|
|
17
|
+
against marker directories: a stray `.vscode/` makes Copilot a candidate, not a
|
|
18
|
+
target. Read `targets` and `candidates` from the step-1 `status --json`.
|
|
19
|
+
|
|
20
|
+
- `targets.source` is `settings`: use `targets.agents`. Ask nothing.
|
|
21
|
+
- `none` and exactly one candidate: anchor it with
|
|
22
|
+
`npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@latest agents --agent <id> --json`
|
|
23
|
+
and say so in one line. This is the one write allowed before the question.
|
|
24
|
+
- `none` and zero or several candidates: ask one multi-select question listing
|
|
25
|
+
the four agents (`claude-code`, `codex`, `copilot`, `cursor`), detected ones
|
|
26
|
+
marked, then anchor the answer the same way (one `--agent` per pick). Ask
|
|
27
|
+
with the structured question tool as in `SKILL.md` step 3.
|
|
28
|
+
- A later change of mind goes through the same `agents --agent …` call.
|
|
29
|
+
|
|
30
|
+
Re-run `status --json` after anchoring and read `agents[]` from that. An agent
|
|
31
|
+
whose `state` is `not-targeted` is never printed or acted on. Print
|
|
32
|
+
`- [x] Target agents — <ids> (anchored)` as the first configuration line.
|
|
24
33
|
|
|
25
34
|
## 1. vendor/
|
|
26
35
|
|
|
@@ -69,7 +78,7 @@ So this row never blocks readiness, and it never probes. It asks.
|
|
|
69
78
|
|
|
70
79
|
- **Check:** read `agents[]` from the `status --json` output step 1 already
|
|
71
80
|
ran. Each entry carries `id` and `skills_dir` — the directory that agent
|
|
72
|
-
actually reads skills from. For each agent
|
|
81
|
+
actually reads skills from. For each target agent (`targeted` is true),
|
|
73
82
|
list `<skills_dir>/sw-specs-editor/` and
|
|
74
83
|
`<skills_dir>/sw-tender-discovery-tool/`: a `SKILL.md` there means that
|
|
75
84
|
editor is installed for that agent. That directory read is the whole check —
|
|
@@ -78,12 +87,12 @@ So this row never blocks readiness, and it never probes. It asks.
|
|
|
78
87
|
state, not something to go looking for. Also read
|
|
79
88
|
`sw-setup-editors.json` from the installer's own state directory if it
|
|
80
89
|
exists — this skill's note of what the user has already declined
|
|
81
|
-
(`{"sw-specs-editor": "declined"}`). That directory is
|
|
82
|
-
in
|
|
90
|
+
(`{"sw-specs-editor": "declined"}`). That directory is the one
|
|
91
|
+
`settings_file` in `targets` names, minus the file name — normally
|
|
83
92
|
`var/sw-ai-sdk/`, which a Shopware project already ignores. Read the path;
|
|
84
93
|
never hard-code it.
|
|
85
94
|
- **Ticked:** `[x]` when the editor's `SKILL.md` is present in every
|
|
86
|
-
|
|
95
|
+
target agent's `skills_dir`; `[-]` when the note records a decline, or
|
|
87
96
|
when it is installed for some agents but not all (say which). `[ ]` only for
|
|
88
97
|
an editor that is neither installed nor declined — and even then it does not
|
|
89
98
|
hold the table open: report it as optional and move on.
|
|
@@ -97,7 +106,7 @@ So this row never blocks readiness, and it never probes. It asks.
|
|
|
97
106
|
`--editor` and the `.xlsx` import on `sw-discover-tender`. Install?"
|
|
98
107
|
|
|
99
108
|
On yes, for each accepted editor, run its own installer once per
|
|
100
|
-
|
|
109
|
+
target agent, passing that agent's `skills_dir` from `status --json`:
|
|
101
110
|
|
|
102
111
|
```
|
|
103
112
|
npx -y @execuro-sw-ecosystem/sw-specs-editor@latest install-skill --target <skills_dir>
|
|
@@ -130,7 +139,7 @@ So this row never blocks readiness, and it never probes. It asks.
|
|
|
130
139
|
<skills_dir>` and re-run the removal" — and carry on with the other agents
|
|
131
140
|
and the other editor.
|
|
132
141
|
- **On no:** write the decline to `sw-setup-editors.json` in the directory
|
|
133
|
-
`
|
|
142
|
+
`targets.settings_file` names (create the file, and that directory, if absent; it is
|
|
134
143
|
never tracked) and do not
|
|
135
144
|
offer that editor again on any later run. The user asking for it by name is
|
|
136
145
|
the only thing that re-opens it — then delete its key and install. `--editor`
|
|
@@ -305,7 +314,8 @@ This row never blocks readiness. It folds into step 3's single question.
|
|
|
305
314
|
npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@latest install
|
|
306
315
|
```
|
|
307
316
|
|
|
308
|
-
That command
|
|
317
|
+
That command reuses the anchored target agents and rewrites the installed
|
|
318
|
+
`sw-setup` skill itself, so the newer
|
|
309
319
|
skill takes effect on the next run — which step 3 already causes by re-running
|
|
310
320
|
step 1. For the editors, see row 3: re-running their `install-skill` line is
|
|
311
321
|
their update.
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# Confidence rubric
|
|
2
|
-
|
|
3
|
-
Score each dimension 0–100 against its bands, multiply by weight, sum, round to a whole percent. `points = score × weight / 100`. Score the document as written; a verdict given in chat does not count.
|
|
4
|
-
|
|
5
|
-
## Coverage evidence — weight 20
|
|
6
|
-
|
|
7
|
-
| Score | Band |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| 100 | Every Must `req` line's class rests on a PM verdict or a mechanism cited to `vendor/` or a KB page; ≤5% of rows `unverified` |
|
|
10
|
-
| 70 | ≤15% `unverified`; Should/Could rows partly evidenced |
|
|
11
|
-
| 40 | The PM wave was partly not consulted, or >15% `unverified` |
|
|
12
|
-
| 0 | Classes set from memory |
|
|
13
|
-
|
|
14
|
-
## Estimate basis — weight 20
|
|
15
|
-
|
|
16
|
-
| Score | Band |
|
|
17
|
-
| --- | --- |
|
|
18
|
-
| 100 | Every estimated row has low/mid/high, a level and drivers; foundation efforts attached to named rows |
|
|
19
|
-
| 70 | ≤10% of estimated rows lack a three-point |
|
|
20
|
-
| 40 | The architect was not consulted for at least one cluster |
|
|
21
|
-
| 0 | PD figures without agent input |
|
|
22
|
-
|
|
23
|
-
## Scope lock — weight 20
|
|
24
|
-
|
|
25
|
-
Counts `accepted` lines only. `[ ]`, an unreconciled `[x]`, `rejected` and `suspect` count as nothing.
|
|
26
|
-
|
|
27
|
-
| Score | Band |
|
|
28
|
-
| --- | --- |
|
|
29
|
-
| 100 | ≥80% of Must PD sits on rows that are `detailed` or covered by an accepted line; every vague Must row has a `CQ-n` |
|
|
30
|
-
| 70 | 60–80% of Must PD locked; every vague Must row has a `CQ-n` |
|
|
31
|
-
| 40 | <60% locked, or a vague Must row without a `CQ-n` |
|
|
32
|
-
| 0 | No accepted line and no client question |
|
|
33
|
-
|
|
34
|
-
## Platform decision — weight 15
|
|
35
|
-
|
|
36
|
-
| Score | Band |
|
|
37
|
-
| --- | --- |
|
|
38
|
-
| 100 | Plan, hosting, PSP and CMP decided in §6, each with a reason naming the rows it serves and a source (profile, PM tier, architect alternative); the plan's PD delta stated |
|
|
39
|
-
| 70 | One §6 platform item `_TBD_` or open in a `Q-n` |
|
|
40
|
-
| 40 | Two or more `_TBD_` or open, or the plan undecided |
|
|
41
|
-
| 0 | Profile missing, or the §6 platform table empty |
|
|
42
|
-
|
|
43
|
-
## Integration & migration — weight 15
|
|
44
|
-
|
|
45
|
-
| Score | Band |
|
|
46
|
-
| --- | --- |
|
|
47
|
-
| 100 | Every interface and migration object the RFP names is in §6 with pattern and owner split; §8 and §1.2 are complete for every estimate-driving parameter and migration volume |
|
|
48
|
-
| 70 | Main interfaces covered; secondary ones or the owner split missing; §8/§1.2 mostly complete |
|
|
49
|
-
| 40 | Approach lines missing for named interfaces, or an estimate-driving §1.2 parameter or a §1.2 migration volume is missing without a `CQ-n` |
|
|
50
|
-
| 0 | §6 interface and migration tables `_TBD_` |
|
|
51
|
-
|
|
52
|
-
## Consistency — weight 10
|
|
53
|
-
|
|
54
|
-
| Score | Band |
|
|
55
|
-
| --- | --- |
|
|
56
|
-
| 100 | All probes run (plugins, prior analyses, PRDs, partner assets, RFP-internal); every conflict resolved or logged as `K-n` in §7 |
|
|
57
|
-
| 70 | Probes run; a `K-n` unresolved |
|
|
58
|
-
| 40 | Probes run only partially |
|
|
59
|
-
| 0 | A known conflict unrecorded |
|
|
60
|
-
|
|
61
|
-
## Status
|
|
62
|
-
|
|
63
|
-
| Confidence | Open `high` `Q-n` | Blocking `CQ-n` on a Must row | `suspect` lines | Unreconciled ticks | Status |
|
|
64
|
-
| --- | --- | --- | --- | --- | --- |
|
|
65
|
-
| > 90 | none | none | none | none | **Ready to submit** |
|
|
66
|
-
| > 90 | any of the four present | | | | **Review** |
|
|
67
|
-
| 80–90 | | | | | **Review** |
|
|
68
|
-
| < 80 | | | | | **Draft** |
|
|
69
|
-
|
|
70
|
-
The four conditions override the arithmetic. §2 *Weakest dimension* names every blocker by id.
|
|
71
|
-
|
|
72
|
-
## Honesty rules
|
|
73
|
-
|
|
74
|
-
- Do not round up to cross 80 or 90.
|
|
75
|
-
- Never raise a score because the deadline is close or the user wants the response finished.
|
|
76
|
-
- A row with an open non-blocking question (`estimated, CQ-n`) caps *Scope lock* at 70 for the share of Must PD it carries, unless the assumption its estimate rests on is `accepted`.
|
|
77
|
-
- `_TBD_` anywhere in §6 caps that dimension at 40.
|
|
78
|
-
- `_TBD_` overhead or buffer in the profile caps *Estimate basis* at 70; §2 states that PD is given before both.
|
|
79
|
-
- `reuse: rfp-NNNN <ID>` is evidence only if the source row carried a verdict, not a guess.
|
|
80
|
-
- If the total moved down since the last run, the report says so and names the cause.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Pending harness edits for the tender skill
|
|
2
|
-
|
|
3
|
-
The "Editor mode" section and the eight SKILL.md edits this file used to carry were **applied** (SKILL.md `## Editor mode`, the `--editor` / `--editor-session` input rows, step 0, the `[x] suspect` reconcile bullet, frontmatter, reference list), with the batch kinds redefined for staged writes. What follows is the only part still outstanding.
|
|
4
|
-
|
|
5
|
-
## `extension` class (ladder OOTB → Plugin → Extension → Custom)
|
|
6
|
-
|
|
7
|
-
- `coverage-mapping.md` Internal classes: add `| extension | Development on a specific, named, existing base — a stock feature, a store plugin, a partner asset or a project plugin under custom/plugins — materially smaller than building the capability from scratch; the base is named in the row's Text |`. Token rule: `| extension | the development token; comment prefix "Extension of <base>." |`. Synonyms: `| extension | Extension of, Erweiterung von |`. Note under the table: "Not the Shopware plugin/app sense and not 'uses extension points'; test: if the base disappeared, would the estimate roughly double? yes → extension, no → custom."
|
|
8
|
-
- `analysis-template.md` kinds line: class `stock | config | plugin | extension | custom | commitment | service | not-offered | blocked`; the tool shows `stock` and `config` as OOTB.
|
|
9
|
-
- `agent-briefs.md` §ARCH: the class list gains `extension` with the definition and test above; an `assume` candidate may name `extension` as the class the row takes once accepted. §ROWS: plugin vs extension, and extension vs custom, are not conflicts (the architect decides).
|
|
10
|
-
- `estimation-model.md`: one line — an `extension` row states its base in Text; the three-point covers the delta on that base only.
|
|
11
|
-
- `response-rules.md` class note line: `extension` → "Extension of <base>."
|