@amaster.ai/employee-runtime-connector 0.1.1-beta.143 → 0.1.1-beta.145

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";
@@ -29578,23 +29523,13 @@ function createSourceCompletionStopPolicy({
29578
29523
  }
29579
29524
 
29580
29525
  // src/amaster-runtime-daemon.mjs
29581
- var CONNECTOR_VERSION = "0.1.1-beta.143";
29526
+ var CONNECTOR_VERSION = "0.1.1-beta.145";
29582
29527
  var CONNECTOR_CONTRACT_VERSION = "2026-06-04.v1";
29583
29528
  var SOURCE_ACQUISITION_CAPABILITY2 = source_acquisition_compatibility_default.profileVersion;
29584
29529
  var daemonRequire = createRequire(import.meta.url);
29585
29530
  var SOURCE_ACQUISITION_PROFILE_VERSION2 = source_acquisition_compatibility_default.profileVersion;
29586
29531
  var SOURCE_ACQUISITION_RETENTION_VERSION2 = source_acquisition_compatibility_default.retentionVersion;
29587
- var SOURCE_ACQUISITION_ACTION_VERSION2 = source_acquisition_compatibility_default.actionVersion;
29588
- var SOURCE_ACQUISITION_BROWSER_POLICY_VERSION2 = source_acquisition_compatibility_default.policyVersion;
29589
- var SOURCE_ACQUISITION_HEADLESS_ADAPTER2 = source_acquisition_compatibility_default.adapters[0];
29590
- var SOURCE_ACQUISITION_DESKTOP_ADAPTER2 = "browser_skill_desktop_v1";
29591
29532
  var SOURCE_ACQUISITION_PROFILE_VERSION_V22 = source_acquisition_compatibility_default.v2Activation.profileVersion;
29592
- var SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2 = source_acquisition_compatibility_default.v2Activation.capability;
29593
- var SOURCE_ACQUISITION_V2_PI_VERSION = source_acquisition_compatibility_default.v2Activation.piCodingAgentVersion;
29594
- var SOURCE_ACQUISITION_V2_COMPLETION_GUARD2 = source_acquisition_compatibility_default.v2Activation.completionGuard;
29595
- var SOURCE_ACQUISITION_PACKAGE_VERSIONS = Object.freeze(
29596
- source_acquisition_compatibility_default.requiredPackages
29597
- );
29598
29533
  var MAX_CHECKPOINT_BYTES = 20 * 1024 * 1024;
29599
29534
  var CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1e3;
29600
29535
  var AMASTER_PI_PROHIBITED_EXTRA_ARGS = /* @__PURE__ */ new Set(["--no-extensions", "--no-skills", "--no-tools", "--no-session"]);
@@ -30035,176 +29970,13 @@ function executorReadinessFor(config, executor) {
30035
29970
  function buildExecutorReadiness(config) {
30036
29971
  return config.executors.filter((executor) => executor.kind === "codex" || executor.kind === "pi").map((executor) => executorReadinessFor(config, executor));
30037
29972
  }
30038
- function sourceAcquisitionPackageMetadata(packageName, location = "pi-config") {
30039
- const packageBase = location === "runtime" ? readString(process.env.PI_RUNTIME_ROOT) : readString(process.env.PI_CODING_AGENT_DIR ?? process.env.PI_AGENT_HOME);
30040
- if (!packageBase) return null;
30041
- const packagePath = join16(
30042
- resolve14(expandHomePath(packageBase)),
30043
- ...location === "runtime" ? [] : ["npm"],
30044
- "node_modules",
30045
- ...packageName.split("/"),
30046
- "package.json"
30047
- );
30048
- if (!existsSync15(packagePath)) return null;
30049
- const stat = lstatSync9(packagePath);
30050
- if (!stat.isFile() || stat.isSymbolicLink()) return null;
30051
- const metadata = readJsonFile2(packagePath);
30052
- return metadata.name === packageName && readString(metadata.version) ? metadata : null;
30053
- }
30054
- function sourceAcquisitionBrowserExecutableReady() {
30055
- const executable = readString(process.env.AMASTER_BROWSER_EXECUTABLE_PATH);
30056
- if (!executable || !isAbsolute10(executable)) return false;
30057
- try {
30058
- const stat = statSync10(executable);
30059
- return stat.isFile() && (stat.mode & 73) !== 0;
30060
- } catch {
30061
- return false;
30062
- }
30063
- }
30064
- function sourceAcquisitionV2Cohort(extensionDigest) {
30065
- const names = [
30066
- "AMASTER_SOURCE_ACQUISITION_SUPPORTED_PROFILE_VERSIONS",
30067
- "AMASTER_SOURCE_ACQUISITION_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY",
30068
- "AMASTER_SOURCE_ACQUISITION_COMPLETION_GUARD",
30069
- "AMASTER_SOURCE_ACQUISITION_CAPABILITY_DIGEST",
30070
- "AMASTER_SOURCE_ACQUISITION_RUNTIME_BUILD_COMMIT",
30071
- "AMASTER_SOURCE_ACQUISITION_SOURCE_EXTENSION_DIGEST",
30072
- "AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_VERSION",
30073
- "AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_DIGEST"
30074
- ];
30075
- if (names.every((name) => !readString(process.env[name]))) return null;
30076
- const incompatible = (reason) => ({ state: "incompatible", reason });
30077
- const piMetadata = sourceAcquisitionPackageMetadata(
30078
- "@earendil-works/pi-coding-agent",
30079
- "runtime"
30080
- );
30081
- const piVersion = readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_VERSION);
30082
- const piDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_CODING_AGENT_DIGEST);
30083
- const sourceExtensionDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_SOURCE_EXTENSION_DIGEST);
30084
- const runtimeBuildCommit = readString(process.env.AMASTER_SOURCE_ACQUISITION_RUNTIME_BUILD_COMMIT);
30085
- const deploymentImageDigest = readString(process.env.AMASTER_DEPLOYMENT_IMAGE_DIGEST);
30086
- const capabilityDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_CAPABILITY_DIGEST);
30087
- 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");
30088
- if (piVersion !== SOURCE_ACQUISITION_V2_PI_VERSION || readString(piMetadata?.version) !== piVersion) {
30089
- return incompatible("source_acquisition_v2_pi_version_mismatch");
30090
- }
30091
- if (!piDigest || !/^[a-f0-9]{64}$/u.test(piDigest)) {
30092
- return incompatible("source_acquisition_v2_pi_digest_invalid");
30093
- }
30094
- if (sourceExtensionDigest !== `sha256:${extensionDigest}`) {
30095
- return incompatible("source_acquisition_v2_extension_digest_mismatch");
30096
- }
30097
- if (!runtimeBuildCommit || !/^[a-f0-9]{40}$/u.test(runtimeBuildCommit)) {
30098
- return incompatible("source_acquisition_v2_build_commit_invalid");
30099
- }
30100
- if (!deploymentImageDigest || !/^sha256:[a-f0-9]{64}$/u.test(deploymentImageDigest)) {
30101
- return incompatible("source_acquisition_v2_image_digest_invalid");
30102
- }
30103
- const runtimeIdentity = {
30104
- sourceProfileVersion: SOURCE_ACQUISITION_PROFILE_VERSION_V22,
30105
- piCodingAgentVersion: SOURCE_ACQUISITION_V2_PI_VERSION,
30106
- supportsAgentSettled: true,
30107
- supportsSameSessionFollowUp: true,
30108
- completionRepairHardCapSeconds: 120,
30109
- sourceExtensionDigest,
30110
- runtimeBuildCommit
30111
- };
30112
- const expectedCapabilityDigest = `sha256:${serializeSourceAcquisitionProfile(runtimeIdentity).sha256}`;
30113
- if (capabilityDigest !== expectedCapabilityDigest) {
30114
- return incompatible("source_acquisition_v2_capability_digest_mismatch");
30115
- }
30116
- return {
30117
- state: "ready",
30118
- proof: {
30119
- supportedProfileVersions: [...source_acquisition_compatibility_default.supportedProfileVersions],
30120
- profileVersion: SOURCE_ACQUISITION_PROFILE_VERSION_V22,
30121
- capability: SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2,
30122
- piCodingAgent: { version: piVersion, digest: piDigest },
30123
- sourceExtensionDigest,
30124
- runtimeBuildCommit,
30125
- deploymentImageDigest,
30126
- completionGuard: SOURCE_ACQUISITION_V2_COMPLETION_GUARD2,
30127
- capabilityDigest
30128
- }
30129
- };
30130
- }
30131
29973
  function sourceAcquisitionRuntimeReadiness(config) {
30132
- const unavailable = (reason) => ({ ready: false, reason });
30133
29974
  const piExecutor = config.executors.find((executor) => executor.kind === "pi");
30134
- if (!piExecutor || !commandExists(piExecutor.command, {
30135
- ...process.env,
30136
- AMASTER_EXECUTOR_PATHS: config.executorPaths.join(",")
30137
- })) {
30138
- return unavailable("source_acquisition_pi_executor_unavailable");
30139
- }
30140
- const packageDigests = {
30141
- "@amaster.ai/pi-browser-use": readString(process.env.AMASTER_SOURCE_ACQUISITION_PI_BROWSER_USE_DIGEST)
30142
- };
30143
- const extensionDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_EXTENSION_DIGEST);
30144
- if (!extensionDigest || !/^[a-f0-9]{64}$/.test(extensionDigest)) {
30145
- return unavailable("source_acquisition_extension_digest_unavailable");
30146
- }
30147
- const adapters = (readString(process.env.AMASTER_SOURCE_ACQUISITION_ADAPTERS) ?? "").split(",").map((value) => value.trim()).filter(Boolean);
30148
- if (adapters.length === 0 || adapters.some((adapter) => ![SOURCE_ACQUISITION_HEADLESS_ADAPTER2, SOURCE_ACQUISITION_DESKTOP_ADAPTER2].includes(adapter))) {
30149
- return unavailable("source_acquisition_adapter_attestation_invalid");
30150
- }
30151
- let browserSkill;
30152
- if (adapters.includes(SOURCE_ACQUISITION_DESKTOP_ADAPTER2)) {
30153
- const authenticationOriginDiscoveryCapability = readString(
30154
- process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY
30155
- );
30156
- if (authenticationOriginDiscoveryCapability && authenticationOriginDiscoveryCapability !== SOURCE_AUTHENTICATION_ORIGIN_DISCOVERY_CAPABILITY2) {
30157
- return unavailable("source_acquisition_browser_skill_discovery_attestation_invalid");
30158
- }
30159
- browserSkill = {
30160
- runtimeVersion: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_RUNTIME_VERSION),
30161
- runtimeDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_RUNTIME_DIGEST),
30162
- assetVersion: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_ASSET_VERSION),
30163
- assetDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_ASSET_DIGEST),
30164
- policyVersion: SOURCE_ACQUISITION_BROWSER_POLICY_VERSION2,
30165
- policyDigest: readString(process.env.AMASTER_SOURCE_ACQUISITION_BROWSER_SKILL_POLICY_DIGEST),
30166
- ...authenticationOriginDiscoveryCapability ? {
30167
- authenticationOriginDiscoveryCapability
30168
- } : {}
30169
- };
30170
- 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 ?? "")) {
30171
- return unavailable("source_acquisition_browser_skill_attestation_invalid");
30172
- }
30173
- }
30174
- if (adapters.includes(SOURCE_ACQUISITION_HEADLESS_ADAPTER2) && !sourceAcquisitionBrowserExecutableReady()) {
30175
- return unavailable("source_acquisition_browser_executable_unavailable");
30176
- }
30177
- const connectorDigest = readString(process.env.AMASTER_SOURCE_ACQUISITION_CONNECTOR_DIGEST);
30178
- if (!connectorDigest || !/^[a-f0-9]{64}$/.test(connectorDigest)) {
30179
- return unavailable("source_acquisition_connector_digest_unavailable");
30180
- }
30181
- const packages = [];
30182
- for (const [name, version] of Object.entries(SOURCE_ACQUISITION_PACKAGE_VERSIONS)) {
30183
- const metadata = sourceAcquisitionPackageMetadata(name);
30184
- const digest = packageDigests[name];
30185
- if (readString(metadata?.version) !== version) {
30186
- return unavailable("source_acquisition_package_version_mismatch");
30187
- }
30188
- if (!digest || !/^[a-f0-9]{64}$/.test(digest)) {
30189
- return unavailable("source_acquisition_package_digest_unavailable");
30190
- }
30191
- packages.push({ name, version, digest });
30192
- }
30193
- const v2Cohort = sourceAcquisitionV2Cohort(extensionDigest);
30194
29975
  return {
30195
- ready: true,
30196
- profileVersion: SOURCE_ACQUISITION_PROFILE_VERSION2,
30197
- retentionVersion: SOURCE_ACQUISITION_RETENTION_VERSION2,
30198
- actionVersion: SOURCE_ACQUISITION_ACTION_VERSION2,
30199
- extension: { digest: extensionDigest },
30200
- adapters,
30201
- ...browserSkill ? { browserSkill } : {},
30202
- connector: {
30203
- version: CONNECTOR_VERSION,
30204
- digest: connectorDigest
30205
- },
30206
- packages,
30207
- ...v2Cohort ? { v2Cohort } : {}
29976
+ ready: Boolean(piExecutor && commandExists(piExecutor.command, {
29977
+ ...process.env,
29978
+ AMASTER_EXECUTOR_PATHS: config.executorPaths.join(",")
29979
+ }))
30208
29980
  };
30209
29981
  }
30210
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.143";
10
+ const CONNECTOR_VERSION = "0.1.1-beta.145";
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.143",
3
+ "version": "0.1.1-beta.145",
4
4
  "description": "MirrorX runtime connector CLI and daemon",
5
5
  "license": "MIT",
6
6
  "type": "module",