qlogicagent 2.11.1 → 2.11.3
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/dist/cli.js +290 -289
- package/dist/index.js +292 -291
- package/dist/pet-contracts.js +1 -1
- package/dist/protocol.js +1 -1
- package/dist/types/cli/handlers/session-handler.d.ts +3 -3
- package/dist/types/cli/media-runtime-facade.d.ts +8 -0
- package/dist/types/cli/pet-runtime.d.ts +1 -3
- package/dist/types/cli/session-query-service.d.ts +1 -0
- package/dist/types/protocol/wire/acp-protocol.d.ts +6 -0
- package/dist/types/protocol/wire/gateway-rpc.d.ts +2 -0
- package/dist/types/protocol/wire/pet-contracts.d.ts +3 -2
- package/dist/types/runtime/infra/acp-detector.d.ts +21 -0
- package/dist/types/runtime/infra/project-store.d.ts +1 -0
- package/dist/types/runtime/pet/hatch-pet-runner.d.ts +18 -0
- package/dist/types/runtime/pet/index.d.ts +12 -5
- package/dist/types/runtime/pet/pet-file-loader.d.ts +1 -1
- package/dist/types/runtime/pet/pet-growth-engine.d.ts +2 -58
- package/dist/types/runtime/pet/pet-profile-service.d.ts +5 -7
- package/dist/types/runtime/pet/pet-reaction-engine.d.ts +11 -0
- package/dist/types/runtime/pet/pet-soul-service.d.ts +2 -2
- package/dist/types/runtime/pet/pet-types.d.ts +1 -32
- package/dist/types/runtime/pet/petdex-asset.d.ts +3 -109
- package/dist/types/runtime/pet/petdex-forge-service.d.ts +3 -94
- package/dist/types/runtime/prompt/fresh-workspace-evidence.d.ts +1 -0
- package/dist/types/runtime/session/session-locator.d.ts +2 -0
- package/dist/types/runtime/session/session-persistence.d.ts +17 -3
- package/dist/types/skills/tools/petdex-create-tool.d.ts +2 -16
- package/dist/vendor/hatch-pet/LICENSE.txt +201 -0
- package/dist/vendor/hatch-pet/NOTICE.md +25 -0
- package/dist/vendor/hatch-pet/references/animation-rows.md +29 -0
- package/dist/vendor/hatch-pet/references/codex-pet-contract.md +35 -0
- package/dist/vendor/hatch-pet/references/qa-rubric.md +66 -0
- package/dist/vendor/hatch-pet/scripts/compose_atlas.py +169 -0
- package/dist/vendor/hatch-pet/scripts/derive_running_left_from_running_right.py +150 -0
- package/dist/vendor/hatch-pet/scripts/extract_strip_frames.py +408 -0
- package/dist/vendor/hatch-pet/scripts/inspect_frames.py +256 -0
- package/dist/vendor/hatch-pet/scripts/make_contact_sheet.py +96 -0
- package/dist/vendor/hatch-pet/scripts/prepare_pet_run.py +830 -0
- package/dist/vendor/hatch-pet/scripts/render_animation_previews.py +78 -0
- package/dist/vendor/hatch-pet/scripts/validate_atlas.py +157 -0
- package/package.json +5 -3
- package/dist/types/runtime/pet/pet-reaction-service.d.ts +0 -33
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Create a labeled contact sheet from a Codex pet atlas."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from PIL import Image, ImageDraw, ImageFont
|
|
10
|
+
|
|
11
|
+
COLUMNS = 8
|
|
12
|
+
ROWS = 9
|
|
13
|
+
CELL_WIDTH = 192
|
|
14
|
+
CELL_HEIGHT = 208
|
|
15
|
+
LABEL_HEIGHT = 22
|
|
16
|
+
ROW_NAMES = [
|
|
17
|
+
"idle",
|
|
18
|
+
"running-right",
|
|
19
|
+
"running-left",
|
|
20
|
+
"waving",
|
|
21
|
+
"jumping",
|
|
22
|
+
"failed",
|
|
23
|
+
"waiting",
|
|
24
|
+
"running",
|
|
25
|
+
"review",
|
|
26
|
+
]
|
|
27
|
+
USED_COUNTS = [6, 8, 8, 4, 5, 8, 6, 6, 6]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def checker(size: tuple[int, int], square: int = 16) -> Image.Image:
|
|
31
|
+
image = Image.new("RGB", size, "#ffffff")
|
|
32
|
+
draw = ImageDraw.Draw(image)
|
|
33
|
+
for y in range(0, size[1], square):
|
|
34
|
+
for x in range(0, size[0], square):
|
|
35
|
+
if (x // square + y // square) % 2:
|
|
36
|
+
draw.rectangle((x, y, x + square - 1, y + square - 1), fill="#e8e8e8")
|
|
37
|
+
return image
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def main() -> None:
|
|
41
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
42
|
+
parser.add_argument("atlas")
|
|
43
|
+
parser.add_argument("--output", required=True)
|
|
44
|
+
parser.add_argument("--scale", type=float, default=0.5)
|
|
45
|
+
args = parser.parse_args()
|
|
46
|
+
|
|
47
|
+
with Image.open(Path(args.atlas).expanduser().resolve()) as opened:
|
|
48
|
+
atlas = opened.convert("RGBA")
|
|
49
|
+
|
|
50
|
+
cell_w = max(1, round(CELL_WIDTH * args.scale))
|
|
51
|
+
cell_h = max(1, round(CELL_HEIGHT * args.scale))
|
|
52
|
+
width = COLUMNS * cell_w
|
|
53
|
+
height = ROWS * (cell_h + LABEL_HEIGHT)
|
|
54
|
+
sheet = Image.new("RGB", (width, height), "#f7f7f7")
|
|
55
|
+
draw = ImageDraw.Draw(sheet)
|
|
56
|
+
font = ImageFont.load_default()
|
|
57
|
+
|
|
58
|
+
for row in range(ROWS):
|
|
59
|
+
y = row * (cell_h + LABEL_HEIGHT)
|
|
60
|
+
draw.rectangle((0, y, width, y + LABEL_HEIGHT - 1), fill="#111111")
|
|
61
|
+
draw.text((6, y + 5), f"row {row}: {ROW_NAMES[row]}", fill="#ffffff", font=font)
|
|
62
|
+
draw.text(
|
|
63
|
+
(width - 92, y + 5),
|
|
64
|
+
f"{USED_COUNTS[row]} frames",
|
|
65
|
+
fill="#ffffff",
|
|
66
|
+
font=font,
|
|
67
|
+
)
|
|
68
|
+
for column in range(COLUMNS):
|
|
69
|
+
crop = atlas.crop(
|
|
70
|
+
(
|
|
71
|
+
column * CELL_WIDTH,
|
|
72
|
+
row * CELL_HEIGHT,
|
|
73
|
+
(column + 1) * CELL_WIDTH,
|
|
74
|
+
(row + 1) * CELL_HEIGHT,
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
crop = crop.resize((cell_w, cell_h), Image.Resampling.LANCZOS)
|
|
78
|
+
bg = checker((cell_w, cell_h))
|
|
79
|
+
bg.paste(crop, (0, 0), crop)
|
|
80
|
+
x = column * cell_w
|
|
81
|
+
sheet.paste(bg, (x, y + LABEL_HEIGHT))
|
|
82
|
+
outline = "#18a058" if column < USED_COUNTS[row] else "#cc3344"
|
|
83
|
+
draw.rectangle(
|
|
84
|
+
(x, y + LABEL_HEIGHT, x + cell_w - 1, y + LABEL_HEIGHT + cell_h - 1),
|
|
85
|
+
outline=outline,
|
|
86
|
+
)
|
|
87
|
+
draw.text((x + 4, y + LABEL_HEIGHT + 4), str(column), fill="#111111", font=font)
|
|
88
|
+
|
|
89
|
+
output = Path(args.output).expanduser().resolve()
|
|
90
|
+
output.parent.mkdir(parents=True, exist_ok=True)
|
|
91
|
+
sheet.save(output)
|
|
92
|
+
print(f"wrote {output}")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if __name__ == "__main__":
|
|
96
|
+
main()
|