qlogicagent 2.18.12 → 2.19.2

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 (95) hide show
  1. package/README.md +382 -382
  2. package/dist/agent-contract.js +1 -0
  3. package/dist/cli.js +1 -1
  4. package/dist/default-project-knowledge/INSTRUCTIONS.md +7 -7
  5. package/dist/default-project-knowledge/rules/project-workflow.md +6 -6
  6. package/dist/host-contract.js +1 -1
  7. package/dist/host-session-collection-contract.js +1 -0
  8. package/dist/index.js +478 -505
  9. package/dist/pet-host.js +8 -8
  10. package/dist/project-memory-host.js +23 -23
  11. package/dist/protocol.js +1 -1
  12. package/dist/skills/builtin/desktop-screenshot/SKILL.md +62 -62
  13. package/dist/skills/builtin/office-doc-reading/SKILL.md +19 -19
  14. package/dist/types/cli/acp-commands.d.ts +1 -1
  15. package/dist/types/cli/acp-extended-handlers.d.ts +8 -8
  16. package/dist/types/cli/acp-extended-host-adapter.d.ts +0 -11
  17. package/dist/types/cli/acp-session-host.d.ts +2 -0
  18. package/dist/types/cli/core-tool-coordinator.d.ts +0 -9
  19. package/dist/types/cli/default-project-bootstrap.d.ts +2 -32
  20. package/dist/types/cli/handlers/session-handler.d.ts +0 -43
  21. package/dist/types/cli/handlers/solo-handler.d.ts +3 -14
  22. package/dist/types/cli/multi-agent-handler-host.d.ts +3 -16
  23. package/dist/types/cli/product-coordinator.d.ts +3 -14
  24. package/dist/types/cli/rpc-registry.d.ts +0 -2
  25. package/dist/types/cli/stdio-rpc-handler-hosts.d.ts +4 -1
  26. package/dist/types/cli/stdio-server.d.ts +1 -2
  27. package/dist/types/host-contract/index.d.ts +112 -19
  28. package/dist/types/host-session-collection-contract.d.ts +61 -0
  29. package/dist/types/orchestration/agent-instance.d.ts +11 -14
  30. package/dist/types/orchestration/agent-roster.d.ts +8 -4
  31. package/dist/types/orchestration/delegate-bridge.d.ts +8 -0
  32. package/dist/types/orchestration/goal-mode-adapters.d.ts +3 -3
  33. package/dist/types/orchestration/product-persistence.d.ts +0 -4
  34. package/dist/types/orchestration/product-planner.d.ts +4 -6
  35. package/dist/types/orchestration/solo-evaluator.d.ts +2 -5
  36. package/dist/types/orchestration/testing/delegate-test-bridge.d.ts +2 -1
  37. package/dist/types/orchestration/testing/host-agent-provider-directory-fixture.d.ts +7 -0
  38. package/dist/types/orchestration/workflow/qla-executor-host.d.ts +1 -1
  39. package/dist/types/protocol/agent-contract.d.ts +50 -0
  40. package/dist/types/protocol/methods.d.ts +20 -38
  41. package/dist/types/protocol/notifications.d.ts +1 -1
  42. package/dist/types/protocol/wire/acp-agent-management.d.ts +2 -190
  43. package/dist/types/protocol/wire/acp-protocol.d.ts +3 -4
  44. package/dist/types/protocol/wire/agent-events.d.ts +1 -32
  45. package/dist/types/protocol/wire/agent-methods.d.ts +1 -243
  46. package/dist/types/protocol/wire/gateway-rpc.d.ts +343 -15
  47. package/dist/types/protocol/wire/index.d.ts +3 -3
  48. package/dist/types/protocol/wire/notification-payloads.d.ts +103 -126
  49. package/dist/types/runtime/infra/host-agent-provider-directory.d.ts +17 -0
  50. package/dist/types/runtime/infra/project-authority-facade.d.ts +1 -1
  51. package/dist/types/runtime/infra/project-data-paths.d.ts +2 -1
  52. package/dist/types/runtime/infra/project-host-authority.d.ts +3 -2
  53. package/dist/types/runtime/infra/project-store.d.ts +4 -39
  54. package/dist/types/runtime/session/session-catalog.d.ts +0 -12
  55. package/dist/types/runtime/session/session-persistence.d.ts +1 -1
  56. package/dist/types/runtime/session/session-resource-key.d.ts +1 -1
  57. package/dist/types/runtime/session/session-types.d.ts +0 -23
  58. package/dist/types/transport/acp-server.d.ts +2 -10
  59. package/dist/vendor/hatch-pet/LICENSE.txt +201 -201
  60. package/dist/vendor/hatch-pet/NOTICE.md +25 -25
  61. package/dist/vendor/hatch-pet/references/animation-rows.md +29 -29
  62. package/dist/vendor/hatch-pet/references/codex-pet-contract.md +35 -35
  63. package/dist/vendor/hatch-pet/references/qa-rubric.md +66 -66
  64. package/dist/vendor/hatch-pet/scripts/compose_atlas.py +169 -169
  65. package/dist/vendor/hatch-pet/scripts/derive_running_left_from_running_right.py +150 -150
  66. package/dist/vendor/hatch-pet/scripts/extract_strip_frames.py +408 -408
  67. package/dist/vendor/hatch-pet/scripts/inspect_frames.py +256 -256
  68. package/dist/vendor/hatch-pet/scripts/make_contact_sheet.py +96 -96
  69. package/dist/vendor/hatch-pet/scripts/prepare_pet_run.py +834 -834
  70. package/dist/vendor/hatch-pet/scripts/render_animation_previews.py +78 -78
  71. package/dist/vendor/hatch-pet/scripts/validate_atlas.py +157 -157
  72. package/dist/workflow-host.js +10 -10
  73. package/package.json +16 -1
  74. package/dist/types/cli/agent-config-coordinator.d.ts +0 -27
  75. package/dist/types/cli/agent-config-runtime.d.ts +0 -11
  76. package/dist/types/cli/agent-status-notifier.d.ts +0 -11
  77. package/dist/types/cli/handlers/agents-handler.d.ts +0 -121
  78. package/dist/types/cli/handlers/project-handler.d.ts +0 -36
  79. package/dist/types/cli/project-command-service.d.ts +0 -28
  80. package/dist/types/orchestration/delegation-coordinator.d.ts +0 -100
  81. package/dist/types/runtime/infra/acp-detector.d.ts +0 -271
  82. package/dist/types/runtime/infra/agent-config-store.d.ts +0 -30
  83. package/dist/types/runtime/infra/agent-install-runner.d.ts +0 -80
  84. package/dist/types/runtime/infra/external-agent-approvals.d.ts +0 -59
  85. package/dist/types/runtime/infra/migrate-device-scope.d.ts +0 -49
  86. package/dist/types/runtime/infra/project-data-gc.d.ts +0 -15
  87. package/dist/types/runtime/session/native/claude-session-source.d.ts +0 -23
  88. package/dist/types/runtime/session/native/codex-index.d.ts +0 -21
  89. package/dist/types/runtime/session/native/codex-session-source.d.ts +0 -31
  90. package/dist/types/runtime/session/native/cwd-normalize.d.ts +0 -53
  91. package/dist/types/runtime/session/native/ephemeral-rollout-sweep.d.ts +0 -13
  92. package/dist/types/runtime/session/native/native-cwd-agents.d.ts +0 -17
  93. package/dist/types/runtime/session/native/native-session-source.d.ts +0 -89
  94. package/dist/types/runtime/session/native/native-title.d.ts +0 -1
  95. package/dist/types/runtime/session/native/register-builtin-sources.d.ts +0 -1
@@ -1,150 +1,150 @@
1
- #!/usr/bin/env python3
2
- """Conditionally derive running-left by mirroring the approved running-right strip."""
3
-
4
- from __future__ import annotations
5
-
6
- import argparse
7
- import json
8
- from datetime import datetime, timezone
9
- from pathlib import Path
10
-
11
- from PIL import Image, ImageOps
12
-
13
- RUNNING_FRAME_COUNT = 8
14
-
15
-
16
- def load_manifest(run_dir: Path) -> dict[str, object]:
17
- path = run_dir / "imagegen-jobs.json"
18
- if not path.exists():
19
- raise SystemExit(f"job manifest not found: {path}")
20
- return json.loads(path.read_text(encoding="utf-8"))
21
-
22
-
23
- def job_list(manifest: dict[str, object]) -> list[dict[str, object]]:
24
- jobs = manifest.get("jobs")
25
- if not isinstance(jobs, list):
26
- raise SystemExit("invalid imagegen-jobs.json: jobs must be a list")
27
- return [job for job in jobs if isinstance(job, dict)]
28
-
29
-
30
- def find_job(manifest: dict[str, object], job_id: str) -> dict[str, object]:
31
- for job in job_list(manifest):
32
- if job.get("id") == job_id:
33
- return job
34
- raise SystemExit(f"unknown job id: {job_id}")
35
-
36
-
37
- def image_metadata(path: Path) -> dict[str, object]:
38
- with Image.open(path) as image:
39
- image.verify()
40
- with Image.open(path) as image:
41
- return {
42
- "width": image.width,
43
- "height": image.height,
44
- "mode": image.mode,
45
- "format": image.format,
46
- }
47
-
48
-
49
- def manifest_relative(path: Path, run_dir: Path) -> str:
50
- return str(path.resolve().relative_to(run_dir.resolve()))
51
-
52
-
53
- def mirror_strip_preserving_frame_order(
54
- source: Image.Image,
55
- frame_count: int = RUNNING_FRAME_COUNT,
56
- ) -> Image.Image:
57
- rgba = source.convert("RGBA")
58
- mirrored = Image.new("RGBA", rgba.size, (0, 0, 0, 0))
59
- slot_width = rgba.width / frame_count
60
- for index in range(frame_count):
61
- left = round(index * slot_width)
62
- right = round((index + 1) * slot_width)
63
- mirrored.alpha_composite(
64
- ImageOps.mirror(rgba.crop((left, 0, right, rgba.height))),
65
- (left, 0),
66
- )
67
- return mirrored
68
-
69
-
70
- def main() -> None:
71
- parser = argparse.ArgumentParser(description=__doc__)
72
- parser.add_argument("--run-dir", required=True)
73
- parser.add_argument(
74
- "--confirm-appropriate-mirror",
75
- action="store_true",
76
- help="Required after visually confirming the rightward strip can be mirrored without identity/prop issues.",
77
- )
78
- parser.add_argument(
79
- "--decision-note",
80
- required=True,
81
- help="Short note explaining why mirroring is acceptable for this pet.",
82
- )
83
- parser.add_argument("--force", action="store_true")
84
- args = parser.parse_args()
85
-
86
- if not args.confirm_appropriate_mirror:
87
- raise SystemExit("refusing to mirror without --confirm-appropriate-mirror")
88
- if not args.decision_note.strip():
89
- raise SystemExit("--decision-note must explain why mirroring is appropriate")
90
-
91
- run_dir = Path(args.run_dir).expanduser().resolve()
92
- manifest_path = run_dir / "imagegen-jobs.json"
93
- manifest = load_manifest(run_dir)
94
- right_job = find_job(manifest, "running-right")
95
- left_job = find_job(manifest, "running-left")
96
-
97
- if right_job.get("status") != "complete":
98
- raise SystemExit("running-right must be complete before deriving running-left")
99
- mirror_policy = left_job.get("mirror_policy")
100
- if not isinstance(mirror_policy, dict) or mirror_policy.get("may_derive_from") != "running-right":
101
- raise SystemExit("running-left is not configured for conditional mirroring")
102
-
103
- source = run_dir / "decoded" / "running-right.png"
104
- output = run_dir / "decoded" / "running-left.png"
105
- if not source.is_file():
106
- raise SystemExit(f"running-right decoded strip not found: {source}")
107
- if output.exists() and not args.force:
108
- raise SystemExit(f"{output} already exists; pass --force to replace it")
109
-
110
- output.parent.mkdir(parents=True, exist_ok=True)
111
- with Image.open(source) as image:
112
- mirrored = mirror_strip_preserving_frame_order(image)
113
- mirrored.save(output)
114
-
115
- left_job["status"] = "complete"
116
- left_job["source_path"] = manifest_relative(source, run_dir)
117
- left_job["derived_from"] = "running-right"
118
- left_job["completed_at"] = datetime.now(timezone.utc).isoformat()
119
- left_job["metadata"] = image_metadata(output)
120
- left_job["mirror_decision"] = {
121
- "approved": True,
122
- "approved_at": left_job["completed_at"],
123
- "note": args.decision_note.strip(),
124
- "transform": "framewise-horizontal-mirror-preserving-order",
125
- }
126
- for key in [
127
- "last_error",
128
- "repair_reason",
129
- "queued_at",
130
- ]:
131
- left_job.pop(key, None)
132
-
133
- manifest_path.write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
134
- print(
135
- json.dumps(
136
- {
137
- "ok": True,
138
- "job_id": "running-left",
139
- "derived_from": "running-right",
140
- "output": str(output),
141
- "decision_note": args.decision_note.strip(),
142
- "transform": "framewise-horizontal-mirror-preserving-order",
143
- },
144
- indent=2,
145
- )
146
- )
147
-
148
-
149
- if __name__ == "__main__":
150
- main()
1
+ #!/usr/bin/env python3
2
+ """Conditionally derive running-left by mirroring the approved running-right strip."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ from datetime import datetime, timezone
9
+ from pathlib import Path
10
+
11
+ from PIL import Image, ImageOps
12
+
13
+ RUNNING_FRAME_COUNT = 8
14
+
15
+
16
+ def load_manifest(run_dir: Path) -> dict[str, object]:
17
+ path = run_dir / "imagegen-jobs.json"
18
+ if not path.exists():
19
+ raise SystemExit(f"job manifest not found: {path}")
20
+ return json.loads(path.read_text(encoding="utf-8"))
21
+
22
+
23
+ def job_list(manifest: dict[str, object]) -> list[dict[str, object]]:
24
+ jobs = manifest.get("jobs")
25
+ if not isinstance(jobs, list):
26
+ raise SystemExit("invalid imagegen-jobs.json: jobs must be a list")
27
+ return [job for job in jobs if isinstance(job, dict)]
28
+
29
+
30
+ def find_job(manifest: dict[str, object], job_id: str) -> dict[str, object]:
31
+ for job in job_list(manifest):
32
+ if job.get("id") == job_id:
33
+ return job
34
+ raise SystemExit(f"unknown job id: {job_id}")
35
+
36
+
37
+ def image_metadata(path: Path) -> dict[str, object]:
38
+ with Image.open(path) as image:
39
+ image.verify()
40
+ with Image.open(path) as image:
41
+ return {
42
+ "width": image.width,
43
+ "height": image.height,
44
+ "mode": image.mode,
45
+ "format": image.format,
46
+ }
47
+
48
+
49
+ def manifest_relative(path: Path, run_dir: Path) -> str:
50
+ return str(path.resolve().relative_to(run_dir.resolve()))
51
+
52
+
53
+ def mirror_strip_preserving_frame_order(
54
+ source: Image.Image,
55
+ frame_count: int = RUNNING_FRAME_COUNT,
56
+ ) -> Image.Image:
57
+ rgba = source.convert("RGBA")
58
+ mirrored = Image.new("RGBA", rgba.size, (0, 0, 0, 0))
59
+ slot_width = rgba.width / frame_count
60
+ for index in range(frame_count):
61
+ left = round(index * slot_width)
62
+ right = round((index + 1) * slot_width)
63
+ mirrored.alpha_composite(
64
+ ImageOps.mirror(rgba.crop((left, 0, right, rgba.height))),
65
+ (left, 0),
66
+ )
67
+ return mirrored
68
+
69
+
70
+ def main() -> None:
71
+ parser = argparse.ArgumentParser(description=__doc__)
72
+ parser.add_argument("--run-dir", required=True)
73
+ parser.add_argument(
74
+ "--confirm-appropriate-mirror",
75
+ action="store_true",
76
+ help="Required after visually confirming the rightward strip can be mirrored without identity/prop issues.",
77
+ )
78
+ parser.add_argument(
79
+ "--decision-note",
80
+ required=True,
81
+ help="Short note explaining why mirroring is acceptable for this pet.",
82
+ )
83
+ parser.add_argument("--force", action="store_true")
84
+ args = parser.parse_args()
85
+
86
+ if not args.confirm_appropriate_mirror:
87
+ raise SystemExit("refusing to mirror without --confirm-appropriate-mirror")
88
+ if not args.decision_note.strip():
89
+ raise SystemExit("--decision-note must explain why mirroring is appropriate")
90
+
91
+ run_dir = Path(args.run_dir).expanduser().resolve()
92
+ manifest_path = run_dir / "imagegen-jobs.json"
93
+ manifest = load_manifest(run_dir)
94
+ right_job = find_job(manifest, "running-right")
95
+ left_job = find_job(manifest, "running-left")
96
+
97
+ if right_job.get("status") != "complete":
98
+ raise SystemExit("running-right must be complete before deriving running-left")
99
+ mirror_policy = left_job.get("mirror_policy")
100
+ if not isinstance(mirror_policy, dict) or mirror_policy.get("may_derive_from") != "running-right":
101
+ raise SystemExit("running-left is not configured for conditional mirroring")
102
+
103
+ source = run_dir / "decoded" / "running-right.png"
104
+ output = run_dir / "decoded" / "running-left.png"
105
+ if not source.is_file():
106
+ raise SystemExit(f"running-right decoded strip not found: {source}")
107
+ if output.exists() and not args.force:
108
+ raise SystemExit(f"{output} already exists; pass --force to replace it")
109
+
110
+ output.parent.mkdir(parents=True, exist_ok=True)
111
+ with Image.open(source) as image:
112
+ mirrored = mirror_strip_preserving_frame_order(image)
113
+ mirrored.save(output)
114
+
115
+ left_job["status"] = "complete"
116
+ left_job["source_path"] = manifest_relative(source, run_dir)
117
+ left_job["derived_from"] = "running-right"
118
+ left_job["completed_at"] = datetime.now(timezone.utc).isoformat()
119
+ left_job["metadata"] = image_metadata(output)
120
+ left_job["mirror_decision"] = {
121
+ "approved": True,
122
+ "approved_at": left_job["completed_at"],
123
+ "note": args.decision_note.strip(),
124
+ "transform": "framewise-horizontal-mirror-preserving-order",
125
+ }
126
+ for key in [
127
+ "last_error",
128
+ "repair_reason",
129
+ "queued_at",
130
+ ]:
131
+ left_job.pop(key, None)
132
+
133
+ manifest_path.write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
134
+ print(
135
+ json.dumps(
136
+ {
137
+ "ok": True,
138
+ "job_id": "running-left",
139
+ "derived_from": "running-right",
140
+ "output": str(output),
141
+ "decision_note": args.decision_note.strip(),
142
+ "transform": "framewise-horizontal-mirror-preserving-order",
143
+ },
144
+ indent=2,
145
+ )
146
+ )
147
+
148
+
149
+ if __name__ == "__main__":
150
+ main()