@topy-ai/maggie 0.7.15 → 0.7.16
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
|
@@ -247,8 +247,8 @@ artifact schemas.
|
|
|
247
247
|
Recommended upgrade sequence for the current release:
|
|
248
248
|
|
|
249
249
|
```bash
|
|
250
|
-
npx @topy-ai/maggie@0.7.
|
|
251
|
-
npx @topy-ai/maggie@0.7.
|
|
250
|
+
npx @topy-ai/maggie@0.7.16 update --project . --force
|
|
251
|
+
npx @topy-ai/maggie@0.7.16 cleanup --project .
|
|
252
252
|
```
|
|
253
253
|
|
|
254
254
|
Maintainers should pass npm credentials through the repository helper, never
|
|
@@ -258,7 +258,8 @@ as a command-line argument:
|
|
|
258
258
|
node scripts/publish-npm.mjs --maggie-env-file ../.env
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
The 0.7.
|
|
261
|
+
The 0.7.16 workflow tightens the review-gate exit code and adds retry-path
|
|
262
|
+
regression coverage. The 0.7.15 workflow added API contracts, blog review gates, sitemap freshness,
|
|
262
263
|
change-driven IndexNow, and page-kind/source-coverage inventory. It also keeps
|
|
263
264
|
the general `maggie-qa-workflow` skill and `maggie qa`
|
|
264
265
|
CLI for scenario manifests, secret-free browser evidence metadata, test/fix/
|
package/README.zh-TW.md
CHANGED
|
@@ -8,7 +8,7 @@ Codex、Claude Code 與相容的 coding agents。
|
|
|
8
8
|
## 安裝
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
npx @topy-ai/maggie@0.7.
|
|
11
|
+
npx @topy-ai/maggie@0.7.16 init --agent all
|
|
12
12
|
npx @topy-ai/maggie doctor --project .
|
|
13
13
|
```
|
|
14
14
|
|
|
@@ -25,6 +25,7 @@ maggie doctor --project . --require-bootstrap --strict
|
|
|
25
25
|
deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
|
|
26
26
|
publish 與 production deployment 需要明確確認。
|
|
27
27
|
|
|
28
|
+
0.7.16 補強 review gate 的 CI exit code 與 IndexNow retry regression;
|
|
28
29
|
0.7.15 也加入 API schema contract、blog review gate、sitemap freshness
|
|
29
30
|
warning、change-driven IndexNow 與 page-kind/source-coverage inventory。
|
|
30
31
|
|
|
@@ -64,6 +64,8 @@ def main() -> int:
|
|
|
64
64
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
65
65
|
if args.command in {"ingest", "translate-pending"} and result.get("status") == "partial":
|
|
66
66
|
return 1
|
|
67
|
+
if args.command == "check-gate":
|
|
68
|
+
return 0 if result.get("passed") else 1
|
|
67
69
|
return 0 if args.command != "validate" or result.get("valid") else 1
|
|
68
70
|
|
|
69
71
|
|
|
@@ -122,7 +122,8 @@ def submit_plan(plan: dict[str, Any], state: dict[str, Any], endpoint: str) -> d
|
|
|
122
122
|
if accepted:
|
|
123
123
|
stamp = _iso(_now())
|
|
124
124
|
entries.extend({"url": url, "statusCode": status_code, "acceptedAt": stamp, "batchId": hashlib.sha256((stamp + url).encode()).hexdigest()[:12]} for url in urls)
|
|
125
|
-
|
|
125
|
+
if accepted:
|
|
126
|
+
state.update({"schemaVersion": SCHEMA, "submissions": entries})
|
|
126
127
|
return {"schemaVersion": SCHEMA, "status": "accepted" if accepted else "retryable-failure" if retryable else "failed",
|
|
127
128
|
"submitted": len(urls), "accepted": len(urls) if accepted else 0, "statusCode": status_code,
|
|
128
129
|
"retryable": retryable, "failure": failure, "mutation": True}
|
|
@@ -130,7 +130,12 @@ def classify_inventory(value: object, *, require_page_kinds: bool = False, requi
|
|
|
130
130
|
if path in seen:
|
|
131
131
|
errors.append(f"duplicate inventory path: {path}")
|
|
132
132
|
seen.add(path)
|
|
133
|
-
|
|
133
|
+
explicit_kind = str(page.get("kind") or "").casefold()
|
|
134
|
+
# `kind` was historically the renderer field, but the page-kind
|
|
135
|
+
# vocabulary is also accepted for compact host inventories. In that
|
|
136
|
+
# case infer the renderer from sections/source and keep the axes apart.
|
|
137
|
+
renderer_value = page.get("rendererKind") or page.get("rendering") or (None if explicit_kind in PAGE_KINDS else page.get("kind"))
|
|
138
|
+
explicit = str(renderer_value or page.get("classification") or "").casefold()
|
|
134
139
|
if explicit in {"code", "code-rendered", "component", "source"}:
|
|
135
140
|
kind = "code-rendered"
|
|
136
141
|
elif explicit in {"band", "section", "sections"}:
|