@amaster.ai/employee-runtime-connector 0.1.1-beta.142 → 0.1.1-beta.144

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
@@ -33,9 +33,13 @@ The publish workflow verifies that npm records the publishing commit as the pack
33
33
 
34
34
  ## Package Contents
35
35
 
36
+ ## Pi plugin ownership boundary
37
+
38
+ `pi-cli-runtime` owns Pi plugin installation, versions, package resolution, and configuration. The connector must only start Pi, deliver a command, manage its process lifecycle, and return its result. Do not add Pi-plugin package/version/digest/schema/config checks to connector registration, heartbeat, capability advertisement, or command dispatch. A plugin failure is task execution evidence, not a connector admission decision.
39
+
36
40
  - `dist/amaster-runtime.mjs`: configuration, pairing, workspace, diagnostics, and daemon lifecycle CLI.
37
41
  - `dist/amaster-runtime-daemon.mjs`: standalone daemon bundle for connector registration, heartbeat, command execution, and result ingestion.
38
- - `dist/source-acquisition-compatibility.json`: versioned Source Acquisition compatibility manifest. Runner image builds must read this file from the exact installed connector package and fail before publishing when their Source Acquisition profile, adapter, or required package versions do not match it.
42
+ - `dist/source-acquisition-compatibility.json`: versioned Source Acquisition protocol and failure-classification manifest. It does not constrain Pi plugin packages, versions, or configuration.
39
43
 
40
44
  Source executor diagnostics remain inside the complete run result JSON for authorized Server/read-surface handling. They contain only manifest-allowlisted failure and reason codes plus bounded phase/retry/start-state fields; raw error messages, arbitrary error codes, paths, locators, stdout, and stderr are not part of that contract. This Connector-only slice does not add a Company Sources client projection.
41
45
 
@@ -4071,9 +4071,6 @@ var source_acquisition_compatibility_default = {
4071
4071
  adapters: [
4072
4072
  "pi_browser_use_headless_v1"
4073
4073
  ],
4074
- requiredPackages: {
4075
- "@amaster.ai/pi-browser-use": "0.1.2-beta.61"
4076
- },
4077
4074
  failureClassification: {
4078
4075
  phases: [
4079
4076
  "source_profile",
@@ -4229,9 +4226,6 @@ var SOURCE_ACQUISITION_PUBLIC_TOOLS = [
4229
4226
  "runtime_action.status"
4230
4227
  ];
4231
4228
  var SOURCE_ACQUISITION_AUTHENTICATED_TOOLS = SOURCE_ACQUISITION_PUBLIC_TOOLS;
4232
- var SOURCE_ACQUISITION_REQUIRED_PACKAGES = Object.freeze(
4233
- source_acquisition_compatibility_default.requiredPackages
4234
- );
4235
4229
 
4236
4230
  // ../shared/src/company-source-locator.ts
4237
4231
  var CREDENTIAL_QUERY_KEY = /(?:^|[_-])(?:access_?token|api_?key|auth(?:orization)?|client_?secret|credential|jwt|oauth|password|secret|session|signature|signed|sig|token)(?:$|[_-])/iu;
@@ -4459,11 +4453,6 @@ var sourceAcquisitionLimitsSchema = external_exports.object({
4459
4453
  maxSummaryChars: external_exports.number().int().min(1e3).max(5e5)
4460
4454
  }).strict();
4461
4455
  var sourceAcquisitionDigestSchema = external_exports.string().regex(/^[a-f0-9]{64}$/u);
4462
- var sourceAcquisitionBrowserDependencySchema = external_exports.object({
4463
- name: external_exports.literal("@amaster.ai/pi-browser-use"),
4464
- version: external_exports.string().trim().min(1).max(200),
4465
- digest: sourceAcquisitionDigestSchema
4466
- }).strict();
4467
4456
  var sourceAcquisitionBrowserSkillDependencySchema = external_exports.object({
4468
4457
  runtimeVersion: external_exports.string().trim().min(1).max(200),
4469
4458
  runtimeDigest: sourceAcquisitionDigestSchema,
@@ -4475,6 +4464,11 @@ var sourceAcquisitionBrowserSkillDependencySchema = external_exports.object({
4475
4464
  SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY
4476
4465
  ).optional()
4477
4466
  }).strict();
4467
+ var legacySourceAcquisitionBrowserDependencySchema = external_exports.object({
4468
+ name: external_exports.literal("@amaster.ai/pi-browser-use"),
4469
+ version: external_exports.string().trim().min(1).max(200),
4470
+ digest: sourceAcquisitionDigestSchema
4471
+ }).strict();
4478
4472
  var sourceAcquisitionExecutionProfileSchema = external_exports.object({
4479
4473
  purpose: external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION),
4480
4474
  companyId: external_exports.string().uuid(),
@@ -4492,9 +4486,9 @@ var sourceAcquisitionExecutionProfileSchema = external_exports.object({
4492
4486
  contractRevision: external_exports.string().trim().min(1).max(200),
4493
4487
  profileVersion: external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION),
4494
4488
  retentionVersion: external_exports.literal(SOURCE_ACQUISITION_RETENTION_VERSION),
4495
- sourceExtensionDigest: sourceAcquisitionDigestSchema,
4496
4489
  adapter: external_exports.enum([SOURCE_ACQUISITION_HEADLESS_ADAPTER, SOURCE_ACQUISITION_DESKTOP_ADAPTER]),
4497
- browserDependency: sourceAcquisitionBrowserDependencySchema,
4490
+ sourceExtensionDigest: sourceAcquisitionDigestSchema.optional(),
4491
+ browserDependency: legacySourceAcquisitionBrowserDependencySchema.optional(),
4498
4492
  browserSkill: sourceAcquisitionBrowserSkillDependencySchema.optional()
4499
4493
  }).strict(),
4500
4494
  access: external_exports.object({
@@ -4546,7 +4540,7 @@ var sourceAcquisitionExecutionProfileSchema = external_exports.object({
4546
4540
  });
4547
4541
  }
4548
4542
  const authenticated = profile.access.mode === "authenticated";
4549
- if (authenticated && (profile.transport.browserMode !== "existing" || profile.transport.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || !profile.connectorAdmission.browserSkill || !profile.access.browserBindingId || !profile.access.localOpaqueRef || !profile.access.browserLeaseId || !profile.access.browserLeaseExpiresAt) || !authenticated && (profile.transport.browserMode !== "isolated" || profile.transport.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.browserSkill !== void 0 || profile.access.browserBindingId !== void 0 || profile.access.localOpaqueRef !== void 0 || profile.access.browserLeaseId !== void 0 || profile.access.browserLeaseExpiresAt !== void 0)) {
4543
+ if (authenticated && (profile.transport.browserMode !== "existing" || profile.transport.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || !profile.access.browserBindingId || !profile.access.localOpaqueRef || !profile.access.browserLeaseId || !profile.access.browserLeaseExpiresAt) || !authenticated && (profile.transport.browserMode !== "isolated" || profile.transport.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.access.browserBindingId !== void 0 || profile.access.localOpaqueRef !== void 0 || profile.access.browserLeaseId !== void 0 || profile.access.browserLeaseExpiresAt !== void 0)) {
4550
4544
  ctx.addIssue({
4551
4545
  code: external_exports.ZodIssueCode.custom,
4552
4546
  path: ["access", "mode"],
@@ -4571,9 +4565,9 @@ var sourceAcquisitionExecutionProfileV2Schema = external_exports.object({
4571
4565
  contractRevision: external_exports.string().trim().min(1).max(200),
4572
4566
  profileVersion: external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION_V2),
4573
4567
  retentionVersion: external_exports.literal(SOURCE_ACQUISITION_RETENTION_VERSION),
4574
- sourceExtensionDigest: sourceAcquisitionDigestSchema,
4575
4568
  adapter: external_exports.enum([SOURCE_ACQUISITION_HEADLESS_ADAPTER, SOURCE_ACQUISITION_DESKTOP_ADAPTER]),
4576
- browserDependency: sourceAcquisitionBrowserDependencySchema,
4569
+ sourceExtensionDigest: sourceAcquisitionDigestSchema.optional(),
4570
+ browserDependency: legacySourceAcquisitionBrowserDependencySchema.optional(),
4577
4571
  browserSkill: sourceAcquisitionBrowserSkillDependencySchema.optional()
4578
4572
  }).strict(),
4579
4573
  access: external_exports.object({
@@ -4625,7 +4619,7 @@ var sourceAcquisitionExecutionProfileV2Schema = external_exports.object({
4625
4619
  });
4626
4620
  }
4627
4621
  const authenticated = profile.access.mode === "authenticated";
4628
- if (authenticated && (profile.transport.browserMode !== "existing" || profile.transport.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || !profile.connectorAdmission.browserSkill || !profile.access.browserBindingId || !profile.access.localOpaqueRef || !profile.access.browserLeaseId || !profile.access.browserLeaseExpiresAt) || !authenticated && (profile.transport.browserMode !== "isolated" || profile.transport.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.browserSkill !== void 0 || profile.access.browserBindingId !== void 0 || profile.access.localOpaqueRef !== void 0 || profile.access.browserLeaseId !== void 0 || profile.access.browserLeaseExpiresAt !== void 0)) {
4622
+ if (authenticated && (profile.transport.browserMode !== "existing" || profile.transport.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_DESKTOP_ADAPTER || !profile.access.browserBindingId || !profile.access.localOpaqueRef || !profile.access.browserLeaseId || !profile.access.browserLeaseExpiresAt) || !authenticated && (profile.transport.browserMode !== "isolated" || profile.transport.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.connectorAdmission.adapter !== SOURCE_ACQUISITION_HEADLESS_ADAPTER || profile.access.browserBindingId !== void 0 || profile.access.localOpaqueRef !== void 0 || profile.access.browserLeaseId !== void 0 || profile.access.browserLeaseExpiresAt !== void 0)) {
4629
4623
  ctx.addIssue({
4630
4624
  code: external_exports.ZodIssueCode.custom,
4631
4625
  path: ["access"],
@@ -4701,55 +4695,6 @@ var sourceAuthenticationOriginDiscoveryIngestSchema = external_exports.object({
4701
4695
  receipt: authenticationOriginDiscoveryReceiptSchema,
4702
4696
  receiptDigest: sha256PrefixedDigestSchema
4703
4697
  }).strict();
4704
- var sourceAcquisitionRuntimeStatusSchema = external_exports.object({
4705
- ready: external_exports.literal(true),
4706
- profileVersion: external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION),
4707
- retentionVersion: external_exports.literal(SOURCE_ACQUISITION_RETENTION_VERSION),
4708
- actionVersion: external_exports.literal(SOURCE_ACQUISITION_ACTION_VERSION),
4709
- extension: external_exports.object({
4710
- digest: sourceAcquisitionDigestSchema
4711
- }).strict(),
4712
- adapters: external_exports.array(external_exports.enum([
4713
- SOURCE_ACQUISITION_HEADLESS_ADAPTER,
4714
- SOURCE_ACQUISITION_DESKTOP_ADAPTER
4715
- ])).min(1).max(2),
4716
- browserSkill: sourceAcquisitionBrowserSkillDependencySchema.optional(),
4717
- connector: external_exports.object({
4718
- version: external_exports.string().trim().min(1).max(200),
4719
- digest: external_exports.string().regex(/^[a-f0-9]{64}$/u)
4720
- }).strict(),
4721
- packages: external_exports.array(external_exports.object({
4722
- name: external_exports.string().trim().min(1).max(200),
4723
- version: external_exports.string().trim().min(1).max(200),
4724
- digest: external_exports.string().regex(/^[a-f0-9]{64}$/u)
4725
- }).strict()).min(1).max(20),
4726
- v2Cohort: external_exports.union([
4727
- external_exports.object({
4728
- state: external_exports.literal("ready"),
4729
- proof: external_exports.object({
4730
- supportedProfileVersions: external_exports.tuple([
4731
- external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION),
4732
- external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION_V2)
4733
- ]),
4734
- profileVersion: external_exports.literal(SOURCE_ACQUISITION_PROFILE_VERSION_V2),
4735
- capability: external_exports.literal(SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY),
4736
- piCodingAgent: external_exports.object({
4737
- version: external_exports.literal(SOURCE_ACQUISITION_V2_PI_CODING_AGENT_VERSION),
4738
- digest: sourceAcquisitionDigestSchema
4739
- }).strict(),
4740
- sourceExtensionDigest: sha256PrefixedDigestSchema,
4741
- runtimeBuildCommit: external_exports.string().regex(/^[a-f0-9]{40}$/u),
4742
- deploymentImageDigest: sha256PrefixedDigestSchema,
4743
- completionGuard: external_exports.literal(SOURCE_ACQUISITION_V2_COMPLETION_GUARD),
4744
- capabilityDigest: sha256PrefixedDigestSchema
4745
- }).strict()
4746
- }).strict(),
4747
- external_exports.object({
4748
- state: external_exports.literal("incompatible"),
4749
- reason: external_exports.string().regex(/^source_acquisition_v2_[a-z0-9_]{1,100}$/u)
4750
- }).strict()
4751
- ]).optional()
4752
- }).strict();
4753
4698
 
4754
4699
  // ../shared/src/amaster-runtime-connector.ts
4755
4700
  var AMASTER_RUNTIME_COMPLETION_TERMINALIZATION_RACE_ERROR_CODE = "runtime_completion_terminalization_race";
@@ -9784,10 +9729,16 @@ var createIssueBaseSchema = external_exports.object({
9784
9729
  instructions: multilineTextSchema.optional().nullable()
9785
9730
  }).strict().optional().nullable()
9786
9731
  });
9732
+ var createIssueLabelNamesSchema = external_exports.array(external_exports.string().trim().min(1).max(48)).max(3).describe(
9733
+ "Optional existing or new label names. Use zero to three reusable work categories: prefer exact existing Company labels that fit the taxonomy, otherwise use a shared business-domain label or a stable industry-specific topic grounded in verified Company context. Do not use entity names, Issue kinds, workflow metadata, one-off deliverables, file formats, or vague buckets as labels. The Server creates missing names and reuses exact Company matches."
9734
+ );
9787
9735
  var createIssueInputSchema = createIssueBaseSchema.extend({
9788
- status: createIssueBaseSchema.shape.status.optional()
9736
+ status: createIssueBaseSchema.shape.status.optional(),
9737
+ labels: createIssueLabelNamesSchema.optional()
9789
9738
  });
9790
- var createIssueSchema = withCreateIssueStatusDefault(createIssueBaseSchema);
9739
+ var createIssueSchema = withCreateIssueStatusDefault(createIssueBaseSchema.extend({
9740
+ labels: createIssueLabelNamesSchema.optional()
9741
+ }));
9791
9742
  var upsertIssueWatchdogSchema = external_exports.object({
9792
9743
  agentId: external_exports.string().uuid(),
9793
9744
  instructions: multilineTextSchema.optional().nullable()
@@ -9809,7 +9760,8 @@ var createChildIssueSchema = withCreateIssueStatusDefault(createIssueBaseSchema.
9809
9760
  delegation: issueDelegationInputSchema,
9810
9761
  acceptanceCriteria: external_exports.array(external_exports.string().trim().min(1).max(500)).max(20).optional(),
9811
9762
  blockParentUntilDone: external_exports.boolean().optional().default(false),
9812
- inputWorkProductIds: external_exports.array(external_exports.string().uuid()).max(50).optional()
9763
+ inputWorkProductIds: external_exports.array(external_exports.string().uuid()).max(50).optional(),
9764
+ labels: createIssueLabelNamesSchema.optional()
9813
9765
  }));
9814
9766
  var createAcceptedPlanDecompositionSchema = external_exports.object({
9815
9767
  acceptedPlanRevisionId: external_exports.string().uuid(),
@@ -29571,23 +29523,13 @@ function createSourceCompletionStopPolicy({
29571
29523
  }
29572
29524
 
29573
29525
  // src/amaster-runtime-daemon.mjs
29574
- var CONNECTOR_VERSION = "0.1.1-beta.142";
29526
+ var CONNECTOR_VERSION = "0.1.1-beta.144";
29575
29527
  var CONNECTOR_CONTRACT_VERSION = "2026-06-04.v1";
29576
29528
  var SOURCE_ACQUISITION_CAPABILITY2 = source_acquisition_compatibility_default.profileVersion;
29577
29529
  var daemonRequire = createRequire(import.meta.url);
29578
29530
  var SOURCE_ACQUISITION_PROFILE_VERSION2 = source_acquisition_compatibility_default.profileVersion;
29579
29531
  var SOURCE_ACQUISITION_RETENTION_VERSION2 = source_acquisition_compatibility_default.retentionVersion;
29580
- var SOURCE_ACQUISITION_ACTION_VERSION2 = source_acquisition_compatibility_default.actionVersion;
29581
- var SOURCE_ACQUISITION_BROWSER_POLICY_VERSION2 = source_acquisition_compatibility_default.policyVersion;
29582
- var SOURCE_ACQUISITION_HEADLESS_ADAPTER2 = source_acquisition_compatibility_default.adapters[0];
29583
- var SOURCE_ACQUISITION_DESKTOP_ADAPTER2 = "browser_skill_desktop_v1";
29584
29532
  var SOURCE_ACQUISITION_PROFILE_VERSION_V22 = source_acquisition_compatibility_default.v2Activation.profileVersion;
29585
- var SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2 = source_acquisition_compatibility_default.v2Activation.capability;
29586
- var SOURCE_ACQUISITION_V2_PI_VERSION = source_acquisition_compatibility_default.v2Activation.piCodingAgentVersion;
29587
- var SOURCE_ACQUISITION_V2_COMPLETION_GUARD2 = source_acquisition_compatibility_default.v2Activation.completionGuard;
29588
- var SOURCE_ACQUISITION_PACKAGE_VERSIONS = Object.freeze(
29589
- source_acquisition_compatibility_default.requiredPackages
29590
- );
29591
29533
  var MAX_CHECKPOINT_BYTES = 20 * 1024 * 1024;
29592
29534
  var CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1e3;
29593
29535
  var AMASTER_PI_PROHIBITED_EXTRA_ARGS = /* @__PURE__ */ new Set(["--no-extensions", "--no-skills", "--no-tools", "--no-session"]);
@@ -30028,176 +29970,13 @@ function executorReadinessFor(config, executor) {
30028
29970
  function buildExecutorReadiness(config) {
30029
29971
  return config.executors.filter((executor) => executor.kind === "codex" || executor.kind === "pi").map((executor) => executorReadinessFor(config, executor));
30030
29972
  }
30031
- function sourceAcquisitionPackageMetadata(packageName, location = "pi-config") {
30032
- const packageBase = location === "runtime" ? readString(process.env.PI_RUNTIME_ROOT) : readString(process.env.PI_CODING_AGENT_DIR ?? process.env.PI_AGENT_HOME);
30033
- if (!packageBase) return null;
30034
- const packagePath = join16(
30035
- resolve14(expandHomePath(packageBase)),
30036
- ...location === "runtime" ? [] : ["npm"],
30037
- "node_modules",
30038
- ...packageName.split("/"),
30039
- "package.json"
30040
- );
30041
- if (!existsSync15(packagePath)) return null;
30042
- const stat = lstatSync9(packagePath);
30043
- if (!stat.isFile() || stat.isSymbolicLink()) return null;
30044
- const metadata = readJsonFile2(packagePath);
30045
- return metadata.name === packageName && readString(metadata.version) ? metadata : null;
30046
- }
30047
- function sourceAcquisitionBrowserExecutableReady() {
30048
- const executable = readString(process.env.AMASTER_BROWSER_EXECUTABLE_PATH);
30049
- if (!executable || !isAbsolute10(executable)) return false;
30050
- try {
30051
- const stat = statSync10(executable);
30052
- return stat.isFile() && (stat.mode & 73) !== 0;
30053
- } catch {
30054
- return false;
30055
- }
30056
- }
30057
- function sourceAcquisitionV2Cohort(extensionDigest) {
30058
- const names = [
30059
- "AMASTER_SOURCE_ACQUISITION_SUPPORTED_PROFILE_VERSIONS",
30060
- "AMASTER_SOURCE_ACQUISITION_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY",
30061
- "AMASTER_SOURCE_ACQUISITION_COMPLETION_GUARD",
30062
- "AMASTER_SOURCE_ACQUISITION_CAPABILITY_DIGEST",
30063
- "AMASTER_SOURCE_ACQUISITION_RUNTIME_BUILD_COMMIT",
30064
- "AMASTER_SOURCE_ACQUISITION_SOURCE_EXTENSION_DIGEST",
30065
- "AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_VERSION",
30066
- "AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_DIGEST"
30067
- ];
30068
- if (names.every((name) => !readString(process.env[name]))) return null;
30069
- const incompatible = (reason) => ({ state: "incompatible", reason });
30070
- const piMetadata = sourceAcquisitionPackageMetadata(
30071
- "@earendil-works/pi-coding-agent",
30072
- "runtime"
30073
- );
30074
- const piVersion = readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_VERSION);
30075
- const piDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_DIGEST);
30076
- const sourceExtensionDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_SOURCE_EXTENSION_DIGEST);
30077
- const runtimeBuildCommit = readString(process.env.AMASTER_SOURCE_ACQUISITION_RUNTIME_BUILD_COMMIT);
30078
- const deploymentImageDigest = readString(process.env.AMASTER_DEPLOYMENT_IMAGE_DIGEST);
30079
- const capabilityDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_CAPABILITY_DIGEST);
30080
- if (readString(process.env.AMASTER_SOURCE_ACQUISITION_SUPPORTED_PROFILE_VERSIONS) !== source_acquisition_compatibility_default.supportedProfileVersions.join(",") || readString(process.env.AMASTER_SOURCE_ACQUISITION_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY) !== SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2 || readString(process.env.AMASTER_SOURCE_ACQUISITION_COMPLETION_GUARD) !== SOURCE_ACQUISITION_V2_COMPLETION_GUARD2) return incompatible("source_acquisition_v2_capability_mismatch");
30081
- if (piVersion !== SOURCE_ACQUISITION_V2_PI_VERSION || readString(piMetadata?.version) !== piVersion) {
30082
- return incompatible("source_acquisition_v2_pi_version_mismatch");
30083
- }
30084
- if (!piDigest || !/^[a-f0-9]{64}$/u.test(piDigest)) {
30085
- return incompatible("source_acquisition_v2_pi_digest_invalid");
30086
- }
30087
- if (sourceExtensionDigest !== `sha256:${extensionDigest}`) {
30088
- return incompatible("source_acquisition_v2_extension_digest_mismatch");
30089
- }
30090
- if (!runtimeBuildCommit || !/^[a-f0-9]{40}$/u.test(runtimeBuildCommit)) {
30091
- return incompatible("source_acquisition_v2_build_commit_invalid");
30092
- }
30093
- if (!deploymentImageDigest || !/^sha256:[a-f0-9]{64}$/u.test(deploymentImageDigest)) {
30094
- return incompatible("source_acquisition_v2_image_digest_invalid");
30095
- }
30096
- const runtimeIdentity = {
30097
- sourceProfileVersion: SOURCE_ACQUISITION_PROFILE_VERSION_V22,
30098
- piCodingAgentVersion: SOURCE_ACQUISITION_V2_PI_VERSION,
30099
- supportsAgentSettled: true,
30100
- supportsSameSessionFollowUp: true,
30101
- completionRepairHardCapSeconds: 120,
30102
- sourceExtensionDigest,
30103
- runtimeBuildCommit
30104
- };
30105
- const expectedCapabilityDigest = `sha256:${serializeSourceAcquisitionProfile(runtimeIdentity).sha256}`;
30106
- if (capabilityDigest !== expectedCapabilityDigest) {
30107
- return incompatible("source_acquisition_v2_capability_digest_mismatch");
30108
- }
30109
- return {
30110
- state: "ready",
30111
- proof: {
30112
- supportedProfileVersions: [...source_acquisition_compatibility_default.supportedProfileVersions],
30113
- profileVersion: SOURCE_ACQUISITION_PROFILE_VERSION_V22,
30114
- capability: SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2,
30115
- piCodingAgent: { version: piVersion, digest: piDigest },
30116
- sourceExtensionDigest,
30117
- runtimeBuildCommit,
30118
- deploymentImageDigest,
30119
- completionGuard: SOURCE_ACQUISITION_V2_COMPLETION_GUARD2,
30120
- capabilityDigest
30121
- }
30122
- };
30123
- }
30124
29973
  function sourceAcquisitionRuntimeReadiness(config) {
30125
- const unavailable = (reason) => ({ ready: false, reason });
30126
29974
  const piExecutor = config.executors.find((executor) => executor.kind === "pi");
30127
- if (!piExecutor || !commandExists(piExecutor.command, {
30128
- ...process.env,
30129
- AMASTER_EXECUTOR_PATHS: config.executorPaths.join(",")
30130
- })) {
30131
- return unavailable("source_acquisition_pi_executor_unavailable");
30132
- }
30133
- const packageDigests = {
30134
- "@amaster.ai/pi-browser-use": readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_BROWSER_USE_DIGEST)
30135
- };
30136
- const extensionDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_EXTENSION_DIGEST);
30137
- if (!extensionDigest || !/^[a-f0-9]{64}$/.test(extensionDigest)) {
30138
- return unavailable("source_acquisition_extension_digest_unavailable");
30139
- }
30140
- const adapters = (readString(process.env.AMASTER_SOURCE_ACQUISITION_ADAPTERS) ?? "").split(",").map((value) => value.trim()).filter(Boolean);
30141
- if (adapters.length === 0 || adapters.some((adapter) => ![SOURCE_ACQUISITION_HEADLESS_ADAPTER2, SOURCE_ACQUISITION_DESKTOP_ADAPTER2].includes(adapter))) {
30142
- return unavailable("source_acquisition_adapter_attestation_invalid");
30143
- }
30144
- let browserSkill;
30145
- if (adapters.includes(SOURCE_ACQUISITION_DESKTOP_ADAPTER2)) {
30146
- const authenticationOriginDiscoveryCapability = readString(
30147
- process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY
30148
- );
30149
- if (authenticationOriginDiscoveryCapability && authenticationOriginDiscoveryCapability !== SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2) {
30150
- return unavailable("source_acquisition_browser_skill_discovery_attestation_invalid");
30151
- }
30152
- browserSkill = {
30153
- runtimeVersion: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_RUNTIME_VERSION),
30154
- runtimeDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_RUNTIME_DIGEST),
30155
- assetVersion: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_ASSET_VERSION),
30156
- assetDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_ASSET_DIGEST),
30157
- policyVersion: SOURCE_ACQUISITION_BROWSER_POLICY_VERSION2,
30158
- policyDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_POLICY_DIGEST),
30159
- ...authenticationOriginDiscoveryCapability ? {
30160
- authenticationOriginDiscoveryCapability
30161
- } : {}
30162
- };
30163
- if (!browserSkill.runtimeVersion || !browserSkill.assetVersion || !/^[a-f0-9]{64}$/u.test(browserSkill.runtimeDigest ?? "") || !/^[a-f0-9]{64}$/u.test(browserSkill.assetDigest ?? "") || !/^[a-f0-9]{64}$/u.test(browserSkill.policyDigest ?? "")) {
30164
- return unavailable("source_acquisition_browser_skill_attestation_invalid");
30165
- }
30166
- }
30167
- if (adapters.includes(SOURCE_ACQUISITION_HEADLESS_ADAPTER2) && !sourceAcquisitionBrowserExecutableReady()) {
30168
- return unavailable("source_acquisition_browser_executable_unavailable");
30169
- }
30170
- const connectorDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_CONNECTOR_DIGEST);
30171
- if (!connectorDigest || !/^[a-f0-9]{64}$/.test(connectorDigest)) {
30172
- return unavailable("source_acquisition_connector_digest_unavailable");
30173
- }
30174
- const packages = [];
30175
- for (const [name, version] of Object.entries(SOURCE_ACQUISITION_PACKAGE_VERSIONS)) {
30176
- const metadata = sourceAcquisitionPackageMetadata(name);
30177
- const digest = packageDigests[name];
30178
- if (readString(metadata?.version) !== version) {
30179
- return unavailable("source_acquisition_package_version_mismatch");
30180
- }
30181
- if (!digest || !/^[a-f0-9]{64}$/.test(digest)) {
30182
- return unavailable("source_acquisition_package_digest_unavailable");
30183
- }
30184
- packages.push({ name, version, digest });
30185
- }
30186
- const v2Cohort = sourceAcquisitionV2Cohort(extensionDigest);
30187
29975
  return {
30188
- ready: true,
30189
- profileVersion: SOURCE_ACQUISITION_PROFILE_VERSION2,
30190
- retentionVersion: SOURCE_ACQUISITION_RETENTION_VERSION2,
30191
- actionVersion: SOURCE_ACQUISITION_ACTION_VERSION2,
30192
- extension: { digest: extensionDigest },
30193
- adapters,
30194
- ...browserSkill ? { browserSkill } : {},
30195
- connector: {
30196
- version: CONNECTOR_VERSION,
30197
- digest: connectorDigest
30198
- },
30199
- packages,
30200
- ...v2Cohort ? { v2Cohort } : {}
29976
+ ready: Boolean(piExecutor && commandExists(piExecutor.command, {
29977
+ ...process.env,
29978
+ AMASTER_EXECUTOR_PATHS: config.executorPaths.join(",")
29979
+ }))
30201
29980
  };
30202
29981
  }
30203
29982
  function browserSessionRuntimeReadiness(config) {
@@ -7,7 +7,7 @@ import { homedir, hostname } from "node:os";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import { BUILD_SUPPORTED_CAPABILITIES } from "./amaster-runtime-daemon/capability-registry.mjs";
9
9
 
10
- const CONNECTOR_VERSION = "0.1.1-beta.142";
10
+ const CONNECTOR_VERSION = "0.1.1-beta.144";
11
11
 
12
12
  const CONFIG_KEY_MAP = new Map([
13
13
  ["server_url", "AMASTER_EMPLOYEE_SERVER_URL"],
@@ -17,9 +17,6 @@
17
17
  "adapters": [
18
18
  "pi_browser_use_headless_v1"
19
19
  ],
20
- "requiredPackages": {
21
- "@amaster.ai/pi-browser-use": "0.1.2-beta.61"
22
- },
23
20
  "failureClassification": {
24
21
  "phases": [
25
22
  "source_profile",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/employee-runtime-connector",
3
- "version": "0.1.1-beta.142",
3
+ "version": "0.1.1-beta.144",
4
4
  "description": "MirrorX runtime connector CLI and daemon",
5
5
  "license": "MIT",
6
6
  "type": "module",