* fix(package): give the upload ZIP a root plugin.json and proper entry types
The plugin directory upload failed with a generic error. The upload reads
package identity from a root plugin.json in the Agent Plugins 1.0.0 format,
and the ZIP carried only .codex-plugin/plugin.json. The builder now derives
that root manifest from the Codex manifest, with the listing fields under
extensions["com.openai"].interface, and validates the name pattern.
Entries were also stored with permission bits but no file-type bits
(zipinfo showed ?rw-r--r--), and the ZIP had no directory entries. Files now
carry S_IFREG, and every parent directory has its own entry.
* fix(package): anchor manifest name checks at the end of the string
Python's $ matches before a trailing newline, so a name like "demo\n" passed both the Agent Plugins name check and the filename check. Both now use \Z. The test's copy of the name pattern was over-escaped and never exercised the consecutive-period rule; it is corrected, with cases for a trailing newline, a double period, a double hyphen, and uppercase.