@amaster.ai/employee-runtime-connector 0.1.1-beta.130 → 0.1.1-beta.132
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 +10 -2
- package/dist/amaster-runtime-daemon/capability-registry.mjs +66 -0
- package/dist/amaster-runtime-daemon.mjs +128 -14
- package/dist/amaster-runtime.mjs +15 -22
- package/dist/templates/.mirrorx-preset-templates.json +30 -30
- package/dist/templates//344/274/201/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277V0.1 /345/211/257/346/234/254.md" +16 -16
- package/dist/templates//344/275/216/347/251/272/347/273/217/346/265/216/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//345/205/203/345/256/207/345/256/231/344/270/216/346/225/260/345/255/227/345/206/205/345/256/271/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +12 -10
- package/dist/templates//345/206/234/344/270/232/344/270/216/351/243/237/345/223/201/346/267/261/345/212/240/345/267/245/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//345/214/273/347/226/227/345/201/245/345/272/267/344/270/216/347/224/237/345/221/275/347/247/221/345/255/246/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//345/220/210/346/210/220/347/224/237/347/211/251/345/255/246/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +12 -10
- package/dist/templates//345/225/206/344/270/232/350/210/252/345/244/251/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +12 -10
- package/dist/templates//345/273/272/347/255/221/344/270/216/346/210/277/345/234/260/344/272/247/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//346/226/207/346/227/205/344/270/216/346/226/207/344/275/223/346/225/231/350/202/262/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//346/266/210/350/264/271/344/270/216/351/233/266/345/224/256/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//347/211/251/346/265/201/344/270/216/344/276/233/345/272/224/351/223/276/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//347/247/221/346/212/200/344/270/216/344/272/222/350/201/224/347/275/221/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//350/203/275/346/272/220/344/270/216/347/216/257/344/277/235/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//351/207/221/350/236/215/344/270/216/344/270/223/344/270/232/346/234/215/345/212/241/350/241/214/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/dist/templates//351/253/230/347/253/257/344/270/216/345/205/210/350/277/233/345/210/266/351/200/240/344/270/232/346/210/230/347/225/245/350/247/204/345/210/222/346/250/241/346/235/277.md +16 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,8 +12,7 @@ For production images, install an exact version and invoke the package bin:
|
|
|
12
12
|
|
|
13
13
|
```sh
|
|
14
14
|
npm install --omit=dev --prefix /opt/pi-cli-runtime @amaster.ai/employee-runtime-connector@0.1.0
|
|
15
|
-
/opt/pi-cli-runtime/node_modules/.bin/amaster-runtime setup https://employee.example.com
|
|
16
|
-
--capabilities remote_registration,heartbeat,executor_discovery,workspace_binding,run_wakeup,context_envelope_v1,managed_project_instructions_v1,final_model_context_attestation_v1,runtime_actions_v2,run_exit_live_path_closure_v1,model_call,model_call_output_contract_v1,run_cancel,run_terminate,logs_cost_workspace_status
|
|
15
|
+
/opt/pi-cli-runtime/node_modules/.bin/amaster-runtime setup https://employee.example.com
|
|
17
16
|
/opt/pi-cli-runtime/node_modules/.bin/amaster-runtime daemon start --foreground
|
|
18
17
|
```
|
|
19
18
|
|
|
@@ -21,6 +20,15 @@ Do not use `latest`, `^`, or `~` in a runtime image. The image tag and connector
|
|
|
21
20
|
|
|
22
21
|
Immutable images should pin an exact package version as their baseline. The current connector does not download or replace runtime code while running; package upgrades and rollbacks belong to the image build and rollout.
|
|
23
22
|
|
|
23
|
+
Connector capability declaration is automatic. The exact package build declares
|
|
24
|
+
what it implements, and runtime readiness removes dynamic capabilities when their
|
|
25
|
+
executor or supporting runtime is unavailable. Operators restrict what the Server
|
|
26
|
+
accepts with `AMASTER_RUNTIME_CONNECTOR_CAPABILITY_ALLOWLIST`; users do not need to
|
|
27
|
+
configure a connector-local capability list. Historical `AMASTER_CAPABILITIES` and
|
|
28
|
+
`--capabilities` inputs remain accepted for rollback compatibility in this release,
|
|
29
|
+
but are ignored and reported as deprecated. They cannot add, remove, or authorize a
|
|
30
|
+
capability.
|
|
31
|
+
|
|
24
32
|
The publish workflow verifies that npm records the publishing commit as the package `gitHead`, then updates the repository deployment pin. Remote deployment accepts that package only when its `gitHead` is an ancestor of the target source commit and the connector runtime build inputs are unchanged between them. Those inputs are the package path plus `packages/shared/src/source-acquisition-compatibility.json`, which is copied into the published package and bundled into the daemon. If another workspace source becomes a runtime build input, expand the provenance scope and tests before release. After restart, deployment also verifies the package CLI version inside the container. Do not update the deployment pin manually to bypass either provenance check.
|
|
25
33
|
|
|
26
34
|
## Package Contents
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export const BUILD_SUPPORTED_CAPABILITIES = Object.freeze([
|
|
2
|
+
"remote_registration",
|
|
3
|
+
"heartbeat",
|
|
4
|
+
"executor_discovery",
|
|
5
|
+
"workspace_binding",
|
|
6
|
+
"run_wakeup",
|
|
7
|
+
"context_envelope_v1",
|
|
8
|
+
"managed_project_instructions_v1",
|
|
9
|
+
"final_model_context_attestation_v1",
|
|
10
|
+
"runtime_actions_v2",
|
|
11
|
+
"run_exit_live_path_closure_v1",
|
|
12
|
+
"model_call",
|
|
13
|
+
"model_call_output_contract_v1",
|
|
14
|
+
"run_cancel",
|
|
15
|
+
"run_terminate",
|
|
16
|
+
"logs_cost_workspace_status",
|
|
17
|
+
"source_acquisition_v1",
|
|
18
|
+
"headed_browser_auth",
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
const DYNAMIC_READINESS = Object.freeze({
|
|
22
|
+
final_model_context_attestation_v1: {
|
|
23
|
+
reasonCode: "managed_pi_executor_required",
|
|
24
|
+
ready: (input) => input.runnerKind === "cloud_managed"
|
|
25
|
+
&& input.executors.some((executor) => executor.kind === "pi"),
|
|
26
|
+
},
|
|
27
|
+
source_acquisition_v1: {
|
|
28
|
+
reasonCode: "source_acquisition_not_ready",
|
|
29
|
+
ready: (input) => input.sourceAcquisition?.ready === true,
|
|
30
|
+
},
|
|
31
|
+
headed_browser_auth: {
|
|
32
|
+
reasonCode: "headed_browser_runtime_not_ready",
|
|
33
|
+
ready: (input) => input.browserSessionBroker?.ready === true,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
function uniqueStrings(values) {
|
|
38
|
+
return Array.from(new Set((Array.isArray(values) ? values : [])
|
|
39
|
+
.map((value) => String(value ?? "").trim())
|
|
40
|
+
.filter(Boolean)));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function buildRuntimeCapabilityReport(input) {
|
|
44
|
+
const legacyConfiguredCapabilities = uniqueStrings(input.legacyConfiguredCapabilities);
|
|
45
|
+
const runtimeUnavailable = [];
|
|
46
|
+
const advertised = BUILD_SUPPORTED_CAPABILITIES.filter((capability) => {
|
|
47
|
+
const readiness = DYNAMIC_READINESS[capability];
|
|
48
|
+
if (!readiness || readiness.ready(input)) return true;
|
|
49
|
+
runtimeUnavailable.push({ capability, reasonCode: readiness.reasonCode });
|
|
50
|
+
return false;
|
|
51
|
+
});
|
|
52
|
+
const buildSet = new Set(BUILD_SUPPORTED_CAPABILITIES);
|
|
53
|
+
const legacySet = new Set(legacyConfiguredCapabilities);
|
|
54
|
+
return {
|
|
55
|
+
schemaVersion: "mirrorx.connector-capability-report/v1",
|
|
56
|
+
source: "build_attested",
|
|
57
|
+
buildSupported: [...BUILD_SUPPORTED_CAPABILITIES],
|
|
58
|
+
runtimeUnavailable,
|
|
59
|
+
advertised,
|
|
60
|
+
deprecatedCapabilityOverridePresent: legacyConfiguredCapabilities.length > 0,
|
|
61
|
+
legacyMissingFromBuildTruth: legacyConfiguredCapabilities.length > 0
|
|
62
|
+
? BUILD_SUPPORTED_CAPABILITIES.filter((capability) => !legacySet.has(capability))
|
|
63
|
+
: [],
|
|
64
|
+
legacyUnsupportedClaims: legacyConfiguredCapabilities.filter((capability) => !buildSet.has(capability)),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -4666,6 +4666,52 @@ var AMASTER_RUNTIME_CONNECTOR_CAPABILITIES = [
|
|
|
4666
4666
|
"headed_browser_auth",
|
|
4667
4667
|
"browser_auth_relay_outbound_e0"
|
|
4668
4668
|
];
|
|
4669
|
+
var TERMINAL_BUSINESS_RECONCILIATION_VERSION = "mirrorx.terminal-business-reconciliation/v1";
|
|
4670
|
+
var terminalBusinessReconciliationAuthoritySnapshotSchema = external_exports.object({
|
|
4671
|
+
outcomeId: external_exports.string().uuid().nullable(),
|
|
4672
|
+
outcomeRevision: external_exports.number().int().positive().nullable(),
|
|
4673
|
+
businessRevision: external_exports.number().int().positive().nullable(),
|
|
4674
|
+
manifestId: external_exports.string().uuid().nullable(),
|
|
4675
|
+
manifestRevision: external_exports.number().int().positive().nullable()
|
|
4676
|
+
}).strict();
|
|
4677
|
+
var terminalBusinessReconciliationSchema = external_exports.discriminatedUnion("outcome", [
|
|
4678
|
+
external_exports.object({
|
|
4679
|
+
outcome: external_exports.literal("finalized"),
|
|
4680
|
+
issueStatus: external_exports.literal("done"),
|
|
4681
|
+
acceptanceId: external_exports.string().uuid()
|
|
4682
|
+
}).strict(),
|
|
4683
|
+
external_exports.object({
|
|
4684
|
+
outcome: external_exports.literal("review_pending"),
|
|
4685
|
+
interactionId: external_exports.string().uuid()
|
|
4686
|
+
}).strict(),
|
|
4687
|
+
external_exports.object({
|
|
4688
|
+
outcome: external_exports.literal("live_path_owned"),
|
|
4689
|
+
owner: external_exports.string().trim().min(1),
|
|
4690
|
+
reasonCode: external_exports.string().trim().min(1)
|
|
4691
|
+
}).strict(),
|
|
4692
|
+
external_exports.object({
|
|
4693
|
+
outcome: external_exports.literal("recoverable_missing_disposition"),
|
|
4694
|
+
reasonCode: external_exports.string().trim().min(1)
|
|
4695
|
+
}).strict(),
|
|
4696
|
+
external_exports.object({
|
|
4697
|
+
outcome: external_exports.literal("blocked_by_gate"),
|
|
4698
|
+
owner: external_exports.string().trim().min(1),
|
|
4699
|
+
reasonCode: external_exports.string().trim().min(1)
|
|
4700
|
+
}).strict(),
|
|
4701
|
+
external_exports.object({
|
|
4702
|
+
outcome: external_exports.literal("missing_authority"),
|
|
4703
|
+
reasonCode: external_exports.string().trim().min(1)
|
|
4704
|
+
}).strict()
|
|
4705
|
+
]);
|
|
4706
|
+
var terminalBusinessReconciliationEnvelopeSchema = external_exports.object({
|
|
4707
|
+
schemaVersion: external_exports.literal(TERMINAL_BUSINESS_RECONCILIATION_VERSION),
|
|
4708
|
+
decisionKey: external_exports.string().regex(/^sha256:[a-f0-9]{64}$/),
|
|
4709
|
+
commandId: external_exports.string().uuid(),
|
|
4710
|
+
runId: external_exports.string().uuid(),
|
|
4711
|
+
executionEpoch: external_exports.number().int().positive(),
|
|
4712
|
+
authoritySnapshot: terminalBusinessReconciliationAuthoritySnapshotSchema,
|
|
4713
|
+
decision: terminalBusinessReconciliationSchema
|
|
4714
|
+
}).strict();
|
|
4669
4715
|
var MIRRORX_RUNTIME_CONTEXT_ENVELOPE_VERSION = "mirrorx.context-envelope.v1";
|
|
4670
4716
|
var mirrorxEffectiveInstructionsSchema = external_exports.object({
|
|
4671
4717
|
schemaVersion: external_exports.literal("mirrorx.project-instructions.v1"),
|
|
@@ -24080,7 +24126,9 @@ function agentInstructionDeliveryAudit(bundle, delivery) {
|
|
|
24080
24126
|
import { existsSync as existsSync8, mkdirSync as mkdirSync6, readFileSync as readFileSync10, renameSync as renameSync7, rmSync as rmSync6, writeFileSync as writeFileSync8 } from "node:fs";
|
|
24081
24127
|
import { homedir as homedir2, hostname } from "node:os";
|
|
24082
24128
|
import { dirname as dirname7, join as join9 } from "node:path";
|
|
24083
|
-
|
|
24129
|
+
|
|
24130
|
+
// src/amaster-runtime-daemon/capability-registry.mjs
|
|
24131
|
+
var BUILD_SUPPORTED_CAPABILITIES = Object.freeze([
|
|
24084
24132
|
"remote_registration",
|
|
24085
24133
|
"heartbeat",
|
|
24086
24134
|
"executor_discovery",
|
|
@@ -24096,8 +24144,50 @@ var CAPABILITIES = [
|
|
|
24096
24144
|
"run_cancel",
|
|
24097
24145
|
"run_terminate",
|
|
24098
24146
|
"logs_cost_workspace_status",
|
|
24099
|
-
"source_acquisition_v1"
|
|
24100
|
-
|
|
24147
|
+
"source_acquisition_v1",
|
|
24148
|
+
"headed_browser_auth"
|
|
24149
|
+
]);
|
|
24150
|
+
var DYNAMIC_READINESS = Object.freeze({
|
|
24151
|
+
final_model_context_attestation_v1: {
|
|
24152
|
+
reasonCode: "managed_pi_executor_required",
|
|
24153
|
+
ready: (input) => input.runnerKind === "cloud_managed" && input.executors.some((executor) => executor.kind === "pi")
|
|
24154
|
+
},
|
|
24155
|
+
source_acquisition_v1: {
|
|
24156
|
+
reasonCode: "source_acquisition_not_ready",
|
|
24157
|
+
ready: (input) => input.sourceAcquisition?.ready === true
|
|
24158
|
+
},
|
|
24159
|
+
headed_browser_auth: {
|
|
24160
|
+
reasonCode: "headed_browser_runtime_not_ready",
|
|
24161
|
+
ready: (input) => input.browserSessionBroker?.ready === true
|
|
24162
|
+
}
|
|
24163
|
+
});
|
|
24164
|
+
function uniqueStrings2(values) {
|
|
24165
|
+
return Array.from(new Set((Array.isArray(values) ? values : []).map((value) => String(value ?? "").trim()).filter(Boolean)));
|
|
24166
|
+
}
|
|
24167
|
+
function buildRuntimeCapabilityReport(input) {
|
|
24168
|
+
const legacyConfiguredCapabilities = uniqueStrings2(input.legacyConfiguredCapabilities);
|
|
24169
|
+
const runtimeUnavailable = [];
|
|
24170
|
+
const advertised = BUILD_SUPPORTED_CAPABILITIES.filter((capability) => {
|
|
24171
|
+
const readiness = DYNAMIC_READINESS[capability];
|
|
24172
|
+
if (!readiness || readiness.ready(input)) return true;
|
|
24173
|
+
runtimeUnavailable.push({ capability, reasonCode: readiness.reasonCode });
|
|
24174
|
+
return false;
|
|
24175
|
+
});
|
|
24176
|
+
const buildSet = new Set(BUILD_SUPPORTED_CAPABILITIES);
|
|
24177
|
+
const legacySet = new Set(legacyConfiguredCapabilities);
|
|
24178
|
+
return {
|
|
24179
|
+
schemaVersion: "mirrorx.connector-capability-report/v1",
|
|
24180
|
+
source: "build_attested",
|
|
24181
|
+
buildSupported: [...BUILD_SUPPORTED_CAPABILITIES],
|
|
24182
|
+
runtimeUnavailable,
|
|
24183
|
+
advertised,
|
|
24184
|
+
deprecatedCapabilityOverridePresent: legacyConfiguredCapabilities.length > 0,
|
|
24185
|
+
legacyMissingFromBuildTruth: legacyConfiguredCapabilities.length > 0 ? BUILD_SUPPORTED_CAPABILITIES.filter((capability) => !legacySet.has(capability)) : [],
|
|
24186
|
+
legacyUnsupportedClaims: legacyConfiguredCapabilities.filter((capability) => !buildSet.has(capability))
|
|
24187
|
+
};
|
|
24188
|
+
}
|
|
24189
|
+
|
|
24190
|
+
// src/amaster-runtime-daemon/config-state.mjs
|
|
24101
24191
|
var RUNNER_KIND_CLOUD_MANAGED = "cloud_managed";
|
|
24102
24192
|
var RUNNER_KIND_DESKTOP_DELEGATED = "desktop_delegated";
|
|
24103
24193
|
function readEnum(value, allowed, fallback, label) {
|
|
@@ -24279,7 +24369,8 @@ function buildConfig(env = process.env, flags = {}) {
|
|
|
24279
24369
|
piExecutorUid,
|
|
24280
24370
|
piExecutorGid,
|
|
24281
24371
|
runnerKind,
|
|
24282
|
-
capabilities:
|
|
24372
|
+
capabilities: [...BUILD_SUPPORTED_CAPABILITIES],
|
|
24373
|
+
legacyConfiguredCapabilities: splitList(flags.capabilities ?? env.AMASTER_CAPABILITIES ?? ""),
|
|
24283
24374
|
pollIntervalSeconds: Number(flags.pollIntervalSeconds ?? env.AMASTER_POLL_INTERVAL_SECONDS ?? 10),
|
|
24284
24375
|
maxConcurrentCommands: Math.min(
|
|
24285
24376
|
parsePositiveInteger(flags.maxConcurrentCommands ?? env.AMASTER_MAX_CONCURRENT_COMMANDS, 1),
|
|
@@ -28670,7 +28761,7 @@ function createSourceCompletionStopPolicy({
|
|
|
28670
28761
|
}
|
|
28671
28762
|
|
|
28672
28763
|
// src/amaster-runtime-daemon.mjs
|
|
28673
|
-
var CONNECTOR_VERSION = "0.1.1-beta.
|
|
28764
|
+
var CONNECTOR_VERSION = "0.1.1-beta.132";
|
|
28674
28765
|
var CONNECTOR_CONTRACT_VERSION = "2026-06-04.v1";
|
|
28675
28766
|
var SOURCE_ACQUISITION_CAPABILITY2 = source_acquisition_compatibility_default.profileVersion;
|
|
28676
28767
|
var daemonRequire = createRequire(import.meta.url);
|
|
@@ -29333,12 +29424,19 @@ function browserSessionRuntimeStatus(config) {
|
|
|
29333
29424
|
return broker ? { ...readiness, ...broker.status() } : readiness;
|
|
29334
29425
|
}
|
|
29335
29426
|
function runtimeAdvertisedCapabilities(config, sourceAcquisition, browserSessionBroker) {
|
|
29336
|
-
return
|
|
29427
|
+
return buildRuntimeCapabilityReport({
|
|
29428
|
+
legacyConfiguredCapabilities: config.legacyConfiguredCapabilities,
|
|
29429
|
+
sourceAcquisition,
|
|
29430
|
+
browserSessionBroker,
|
|
29431
|
+
runnerKind: config.runnerKind,
|
|
29432
|
+
executors: config.executors
|
|
29433
|
+
});
|
|
29337
29434
|
}
|
|
29338
29435
|
function buildRegisterPayload(config) {
|
|
29339
29436
|
const buildCommit = readString(process.env.AMASTER_RUNTIME_BUILD_COMMIT ?? process.env.AMASTER_SOURCE_COMMIT);
|
|
29340
29437
|
const sourceAcquisition = sourceAcquisitionRuntimeReadiness(config);
|
|
29341
29438
|
const browserSessionBroker = browserSessionRuntimeReadiness(config);
|
|
29439
|
+
const capabilityReport = runtimeAdvertisedCapabilities(config, sourceAcquisition, browserSessionBroker);
|
|
29342
29440
|
return {
|
|
29343
29441
|
...config.companyId ? { companyId: config.companyId } : {},
|
|
29344
29442
|
connectorName: config.connectorName,
|
|
@@ -29346,7 +29444,7 @@ function buildRegisterPayload(config) {
|
|
|
29346
29444
|
workspaceBindings: config.workspaceBindings,
|
|
29347
29445
|
networkDomains: config.networkDomains,
|
|
29348
29446
|
executors: config.executors,
|
|
29349
|
-
capabilities:
|
|
29447
|
+
capabilities: capabilityReport.advertised,
|
|
29350
29448
|
contractVersion: CONNECTOR_CONTRACT_VERSION,
|
|
29351
29449
|
connectorVersion: CONNECTOR_VERSION,
|
|
29352
29450
|
...buildCommit ? { buildCommit } : {},
|
|
@@ -29359,7 +29457,12 @@ function buildRegisterPayload(config) {
|
|
|
29359
29457
|
authMode: config.token ? "bearer_token" : config.authHeader ? "custom_header" : "none",
|
|
29360
29458
|
platform: process.platform,
|
|
29361
29459
|
arch: process.arch,
|
|
29362
|
-
node: process.version
|
|
29460
|
+
node: process.version,
|
|
29461
|
+
capabilityReport: {
|
|
29462
|
+
...capabilityReport,
|
|
29463
|
+
connectorVersion: CONNECTOR_VERSION,
|
|
29464
|
+
...buildCommit ? { connectorDigest: `build:${buildCommit}` } : {}
|
|
29465
|
+
}
|
|
29363
29466
|
}
|
|
29364
29467
|
};
|
|
29365
29468
|
}
|
|
@@ -29393,6 +29496,7 @@ function buildHeartbeatPayload(config, options = {}) {
|
|
|
29393
29496
|
const executorReadiness = buildExecutorReadiness(config);
|
|
29394
29497
|
const sourceAcquisition = sourceAcquisitionRuntimeReadiness(config);
|
|
29395
29498
|
const browserSessionBroker = browserSessionRuntimeStatus(config);
|
|
29499
|
+
const capabilityReport = runtimeAdvertisedCapabilities(config, sourceAcquisition, browserSessionBroker);
|
|
29396
29500
|
const status = options.status === "offline" ? "offline" : "online";
|
|
29397
29501
|
const daemonStatus = status === "offline" ? "stopping" : "running";
|
|
29398
29502
|
return {
|
|
@@ -29400,7 +29504,7 @@ function buildHeartbeatPayload(config, options = {}) {
|
|
|
29400
29504
|
workspaceBindings: config.workspaceBindings,
|
|
29401
29505
|
networkDomains: config.networkDomains,
|
|
29402
29506
|
executors: config.executors,
|
|
29403
|
-
capabilities:
|
|
29507
|
+
capabilities: capabilityReport.advertised,
|
|
29404
29508
|
connectorVersion: CONNECTOR_VERSION,
|
|
29405
29509
|
...buildCommit ? { buildCommit } : {},
|
|
29406
29510
|
contractVersion: CONNECTOR_CONTRACT_VERSION,
|
|
@@ -29426,7 +29530,12 @@ function buildHeartbeatPayload(config, options = {}) {
|
|
|
29426
29530
|
...versionDrift.versionDrift || versionDrift.bundleDrift ? versionDrift : {}
|
|
29427
29531
|
},
|
|
29428
29532
|
metadata: {
|
|
29429
|
-
authMode: config.token ? "bearer_token" : config.authHeader ? "custom_header" : "none"
|
|
29533
|
+
authMode: config.token ? "bearer_token" : config.authHeader ? "custom_header" : "none",
|
|
29534
|
+
capabilityReport: {
|
|
29535
|
+
...capabilityReport,
|
|
29536
|
+
connectorVersion: CONNECTOR_VERSION,
|
|
29537
|
+
...buildCommit ? { connectorDigest: `build:${buildCommit}` } : {}
|
|
29538
|
+
}
|
|
29430
29539
|
}
|
|
29431
29540
|
};
|
|
29432
29541
|
}
|
|
@@ -29593,7 +29702,6 @@ AMASTER_CONNECTOR_NAME=${quoteShell(config.connectorName)}
|
|
|
29593
29702
|
AMASTER_MACHINE_ID=${quoteShell(config.machineId)}
|
|
29594
29703
|
AMASTER_WORKSPACE_ALLOWLIST=${quoteShell(config.workspaceBindings.join(","))}
|
|
29595
29704
|
AMASTER_EXECUTORS=${quoteShell(executorEnv)}
|
|
29596
|
-
AMASTER_CAPABILITIES=${quoteShell(config.capabilities.join(","))}
|
|
29597
29705
|
AMASTER_NETWORK_DOMAINS=${quoteShell(config.networkDomains.join(","))}
|
|
29598
29706
|
AMASTER_DAEMON_STATE_FILE=${quoteShell(join16(homedir3(), ".amaster-employee", "runtime-connector-state.json"))}
|
|
29599
29707
|
EOF
|
|
@@ -34508,6 +34616,7 @@ async function executeRunCommand(config, command) {
|
|
|
34508
34616
|
parsed.errorMessage = null;
|
|
34509
34617
|
}
|
|
34510
34618
|
if (succeeded && managedMcpProfile && Array.isArray(command.requiredCapabilities) && command.requiredCapabilities.includes("runtime_actions_v2")) {
|
|
34619
|
+
const usesLivePathClosureContract = command.requiredCapabilities.includes("run_exit_live_path_closure_v1");
|
|
34511
34620
|
const productiveSuccessfulRun = outputTelemetry.meaningfulProgressEventCount > 0 || runtimeArtifacts.length > 0 || mcpToolResults.some((toolResult) => ["succeeded", "approval_required"].includes(readString(toolResult.status)));
|
|
34512
34621
|
let completionState = createRunCompletionState({
|
|
34513
34622
|
connectorId: requireConnectorId(config),
|
|
@@ -34540,13 +34649,13 @@ async function executeRunCommand(config, command) {
|
|
|
34540
34649
|
}
|
|
34541
34650
|
},
|
|
34542
34651
|
completionRequest: {
|
|
34543
|
-
contractVersion:
|
|
34652
|
+
contractVersion: usesLivePathClosureContract ? "amaster.runtime-connector.completion-check.v2" : "amaster.runtime-connector.completion-check.v1",
|
|
34544
34653
|
leaseId: command.leaseId,
|
|
34545
34654
|
proposedStatus: "succeeded",
|
|
34546
34655
|
resultSignals: {
|
|
34547
34656
|
productiveSuccessfulRun,
|
|
34548
34657
|
executorTurnCount: terminalTextRepairUsageBreakdown ? 2 : 1,
|
|
34549
|
-
...
|
|
34658
|
+
...usesLivePathClosureContract ? {
|
|
34550
34659
|
closureAttempts: {
|
|
34551
34660
|
workDisposition: 0,
|
|
34552
34661
|
livePath: 0,
|
|
@@ -34893,7 +35002,7 @@ Commands:
|
|
|
34893
35002
|
|
|
34894
35003
|
Key env:
|
|
34895
35004
|
AMASTER_EMPLOYEE_SERVER_URL, AMASTER_CONNECTOR_TOKEN or AMASTER_CONNECTOR_AUTH_HEADER,
|
|
34896
|
-
AMASTER_WORKSPACE_ALLOWLIST, AMASTER_EXECUTORS,
|
|
35005
|
+
AMASTER_WORKSPACE_ALLOWLIST, AMASTER_EXECUTORS,
|
|
34897
35006
|
AMASTER_NETWORK_DOMAINS, AMASTER_CONNECTOR_ID, AMASTER_DAEMON_STATE_FILE,
|
|
34898
35007
|
AMASTER_MAX_CONCURRENT_COMMANDS, AMASTER_EXECUTOR_MAX_RSS_MB (default 0, disabled),
|
|
34899
35008
|
AMASTER_RUNTIME_ORPHAN_REAPER_INTERVAL_SECONDS (default 300, set 0 to disable),
|
|
@@ -34903,6 +35012,11 @@ Key env:
|
|
|
34903
35012
|
async function main() {
|
|
34904
35013
|
const { command, flags } = parseArgs(process.argv.slice(2));
|
|
34905
35014
|
const config = buildConfig(process.env, flags);
|
|
35015
|
+
if (config.legacyConfiguredCapabilities.length > 0) {
|
|
35016
|
+
process.stderr.write(
|
|
35017
|
+
"Warning: AMASTER_CAPABILITIES/--capabilities is deprecated and ignored; use the Server capability allowlist for operator restrictions.\n"
|
|
35018
|
+
);
|
|
35019
|
+
}
|
|
34906
35020
|
switch (command) {
|
|
34907
35021
|
case "config-template":
|
|
34908
35022
|
printInstall(config);
|
package/dist/amaster-runtime.mjs
CHANGED
|
@@ -5,26 +5,9 @@ import { randomUUID } from "node:crypto";
|
|
|
5
5
|
import { basename, dirname, join, resolve } from "node:path";
|
|
6
6
|
import { homedir, hostname } from "node:os";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { BUILD_SUPPORTED_CAPABILITIES } from "./amaster-runtime-daemon/capability-registry.mjs";
|
|
8
9
|
|
|
9
|
-
const CONNECTOR_VERSION = "0.1.1-beta.
|
|
10
|
-
|
|
11
|
-
const CAPABILITIES = [
|
|
12
|
-
"remote_registration",
|
|
13
|
-
"heartbeat",
|
|
14
|
-
"executor_discovery",
|
|
15
|
-
"workspace_binding",
|
|
16
|
-
"run_wakeup",
|
|
17
|
-
"context_envelope_v1", "managed_project_instructions_v1",
|
|
18
|
-
"final_model_context_attestation_v1",
|
|
19
|
-
"runtime_actions_v2",
|
|
20
|
-
"run_exit_live_path_closure_v1",
|
|
21
|
-
"model_call",
|
|
22
|
-
"model_call_output_contract_v1",
|
|
23
|
-
"run_cancel",
|
|
24
|
-
"run_terminate",
|
|
25
|
-
"logs_cost_workspace_status",
|
|
26
|
-
"source_acquisition_v1",
|
|
27
|
-
];
|
|
10
|
+
const CONNECTOR_VERSION = "0.1.1-beta.132";
|
|
28
11
|
|
|
29
12
|
const CONFIG_KEY_MAP = new Map([
|
|
30
13
|
["server_url", "AMASTER_EMPLOYEE_SERVER_URL"],
|
|
@@ -257,7 +240,6 @@ function withDefaults(config) {
|
|
|
257
240
|
AMASTER_CONNECTOR_NAME: `${hostname()}-amaster`,
|
|
258
241
|
AMASTER_MACHINE_ID: defaultMachineId(),
|
|
259
242
|
AMASTER_WORKSPACE_ALLOWLIST: runtimeWorkspacesRoot,
|
|
260
|
-
AMASTER_CAPABILITIES: CAPABILITIES.join(","),
|
|
261
243
|
AMASTER_NETWORK_DOMAINS: "self-host",
|
|
262
244
|
AMASTER_DAEMON_STATE_FILE: join(configDir, "runtime-connector-state.json"),
|
|
263
245
|
AMASTER_RUNTIME_WORKSPACES_ROOT: runtimeWorkspacesRoot,
|
|
@@ -463,7 +445,8 @@ function printConfig(config) {
|
|
|
463
445
|
["runner_kind", merged.AMASTER_RUNTIME_RUNNER_KIND || "cloud_managed"],
|
|
464
446
|
["heartbeat_log_mode", merged.AMASTER_HEARTBEAT_LOG_MODE || "(compact)"],
|
|
465
447
|
["network_domains", merged.AMASTER_NETWORK_DOMAINS],
|
|
466
|
-
["
|
|
448
|
+
["capability_source", `connector build (${BUILD_SUPPORTED_CAPABILITIES.length}) + runtime readiness`],
|
|
449
|
+
["legacy_capabilities", merged.AMASTER_CAPABILITIES ? "(deprecated; ignored)" : "(none)"],
|
|
467
450
|
["state_file", merged.AMASTER_DAEMON_STATE_FILE],
|
|
468
451
|
["env_file", envFile],
|
|
469
452
|
];
|
|
@@ -498,7 +481,12 @@ function commandSetup(argv) {
|
|
|
498
481
|
config.AMASTER_MACHINE_ID = flags.machine_id || defaultConfig.AMASTER_MACHINE_ID;
|
|
499
482
|
config.AMASTER_RUNTIME_WORKSPACES_ROOT = flags.runtime_workspaces_root || defaultConfig.AMASTER_RUNTIME_WORKSPACES_ROOT;
|
|
500
483
|
config.AMASTER_WORKSPACE_ALLOWLIST = flags.workspace_allowlist || flags.workspace || defaultConfig.AMASTER_WORKSPACE_ALLOWLIST;
|
|
501
|
-
|
|
484
|
+
if (flags.capabilities) {
|
|
485
|
+
config.AMASTER_CAPABILITIES = flags.capabilities;
|
|
486
|
+
process.stderr.write(
|
|
487
|
+
"Warning: --capabilities is deprecated and ignored; restrict accepted capabilities with the Server allowlist.\n",
|
|
488
|
+
);
|
|
489
|
+
}
|
|
502
490
|
config.AMASTER_NETWORK_DOMAINS = flags.network_domains || defaultConfig.AMASTER_NETWORK_DOMAINS;
|
|
503
491
|
config.AMASTER_DAEMON_STATE_FILE = flags.state_file || defaultConfig.AMASTER_DAEMON_STATE_FILE;
|
|
504
492
|
if (flags.executors) config.AMASTER_EXECUTORS = flags.executors;
|
|
@@ -528,6 +516,11 @@ function commandConfig(argv) {
|
|
|
528
516
|
const envKey = envKeyFor(key);
|
|
529
517
|
const value = valueParts.join(" ").trim();
|
|
530
518
|
config[envKey] = envKey === "AMASTER_EMPLOYEE_SERVER_URL" ? normalizeServerUrl(value) : value;
|
|
519
|
+
if (envKey === "AMASTER_CAPABILITIES") {
|
|
520
|
+
process.stderr.write(
|
|
521
|
+
"Warning: connector-local capabilities are deprecated and ignored; restrict accepted capabilities with the Server allowlist.\n",
|
|
522
|
+
);
|
|
523
|
+
}
|
|
531
524
|
writeConfig(config);
|
|
532
525
|
process.stdout.write(`${normalizeKey(key)} updated\n`);
|
|
533
526
|
}
|
|
@@ -3,78 +3,78 @@
|
|
|
3
3
|
"files": [
|
|
4
4
|
{
|
|
5
5
|
"name": "企业战略规划模板V0.1 副本.md",
|
|
6
|
-
"bytes":
|
|
7
|
-
"sha256": "
|
|
6
|
+
"bytes": 19657,
|
|
7
|
+
"sha256": "fe288555abb00c3b0cf9410d3f34deec082655afbfe8d915e9ebe7246c1ff504"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"name": "低空经济行业战略规划模板.md",
|
|
11
|
-
"bytes":
|
|
12
|
-
"sha256": "
|
|
11
|
+
"bytes": 23980,
|
|
12
|
+
"sha256": "27ed70d7cd7dd5a4b131e5e2c2aec089df38b13076942fe0d6ea2a684feb1344"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "元宇宙与数字内容行业战略规划模板.md",
|
|
16
|
-
"bytes":
|
|
17
|
-
"sha256": "
|
|
16
|
+
"bytes": 19417,
|
|
17
|
+
"sha256": "658634f7f422a965812690ae2d11343be92a5f4cbac38632261452a14a4fd260"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"name": "农业与食品深加工行业战略规划模板.md",
|
|
21
|
-
"bytes":
|
|
22
|
-
"sha256": "
|
|
21
|
+
"bytes": 23970,
|
|
22
|
+
"sha256": "1f03400e4380e7b1d98b40bdeec59fae73af59bc4500b9488341708692035dad"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"name": "医疗健康与生命科学行业战略规划模板.md",
|
|
26
|
-
"bytes":
|
|
27
|
-
"sha256": "
|
|
26
|
+
"bytes": 23822,
|
|
27
|
+
"sha256": "a239128a4dd217c5d8cd01102a202dd2039835b74b2a2ef730a912b6adfbdd5c"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"name": "合成生物学行业战略规划模板.md",
|
|
31
|
-
"bytes":
|
|
32
|
-
"sha256": "
|
|
31
|
+
"bytes": 19206,
|
|
32
|
+
"sha256": "2c06b7a7d61e6591e9fb90be2e5444422c5d0f460a42f600de4250b3239b79cd"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"name": "商业航天行业战略规划模板.md",
|
|
36
|
-
"bytes":
|
|
37
|
-
"sha256": "
|
|
36
|
+
"bytes": 26694,
|
|
37
|
+
"sha256": "8d6289c464d7f83473a62117f620332780e41114a2ae62ac6474dc5ccb45db2b"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"name": "建筑与房地产行业战略规划模板.md",
|
|
41
|
-
"bytes":
|
|
42
|
-
"sha256": "
|
|
41
|
+
"bytes": 23677,
|
|
42
|
+
"sha256": "faa9e80c0a3f5e20b5fa33f4c5b2d8196d34528074b3ef2b35631dc697cfd96c"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
"name": "文旅与文体教育行业战略规划模板.md",
|
|
46
|
-
"bytes":
|
|
47
|
-
"sha256": "
|
|
46
|
+
"bytes": 23681,
|
|
47
|
+
"sha256": "15332066fb2f48bc521a0a244dc8a541c5888f9475c4d2877c94627ddd454a1b"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"name": "消费与零售行业战略规划模板.md",
|
|
51
|
-
"bytes":
|
|
52
|
-
"sha256": "
|
|
51
|
+
"bytes": 22282,
|
|
52
|
+
"sha256": "cc47581d7cc76c6ed6afbe9b5c45df2a2e2d4d13b98857f0dd902217ca7c9ad1"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"name": "物流与供应链行业战略规划模板.md",
|
|
56
|
-
"bytes":
|
|
57
|
-
"sha256": "
|
|
56
|
+
"bytes": 23624,
|
|
57
|
+
"sha256": "1497043d2c8204c13c26e55149fdd6fe6fe94832e9f0e4706baa8aec81137326"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"name": "科技与互联网行业战略规划模板.md",
|
|
61
|
-
"bytes":
|
|
62
|
-
"sha256": "
|
|
61
|
+
"bytes": 19709,
|
|
62
|
+
"sha256": "0d2ef39367e5a4e95c908ca38447db3cb1747374b6a3175719d5d9a1b816b48f"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
"name": "能源与环保行业战略规划模板.md",
|
|
66
|
-
"bytes":
|
|
67
|
-
"sha256": "
|
|
66
|
+
"bytes": 23184,
|
|
67
|
+
"sha256": "cf5bbaf542f42fc5c2ee387413fa9068d5f2be6cdc330718b0760be9bac911d9"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
"name": "金融与专业服务行业战略规划模板.md",
|
|
71
|
-
"bytes":
|
|
72
|
-
"sha256": "
|
|
71
|
+
"bytes": 22528,
|
|
72
|
+
"sha256": "7f2f90f5de809bcf8743a848b06c77edec28365dd315488776273478ca72662b"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"name": "高端与先进制造业战略规划模板.md",
|
|
76
|
-
"bytes":
|
|
77
|
-
"sha256": "
|
|
76
|
+
"bytes": 22181,
|
|
77
|
+
"sha256": "7adc0b8ebb90cb65b2ac6a5188928b50fb4f51c8f5d776e7250910567e548aeb"
|
|
78
78
|
}
|
|
79
79
|
]
|
|
80
80
|
}
|
|
@@ -11,19 +11,19 @@
|
|
|
11
11
|
- **核心特点**:业务与合规深度融合,而非 “两张皮”;所有举措均可拆解为可执行、可考核、可复盘的具体任务;覆盖从战略顶层设计到落地管控的全流程。
|
|
12
12
|
|
|
13
13
|
<mirrorx_template_guidance>
|
|
14
|
-
<completion
|
|
14
|
+
<completion>章节齐全只代表结构对齐;完成稿必须形成可供管理层判断、取舍和执行的实质内容。通用判断、模板复述、只有表格字段而缺少公司证据的内容,不计为实质完成;仅当所有保留章节均达到本元素的相应验收标准,才算完成。按公司规模、业务阶段、监管强度和本次决策裁剪,资本运作、系统建设、组织扩张和专项合规仅在存在实质需求时展开。</completion>
|
|
15
15
|
<continuation>若一次写入无法完成全文,继续在同一文件从下一未完成章节写到全部完成;不得上传中间稿,也不得让后半部分退化为提纲、通用填表或“待建立”事项。</continuation>
|
|
16
|
-
<analysis>每个核心判断形成“事实与来源 → 分析 → 战略含义 →
|
|
17
|
-
<strategy_choice
|
|
18
|
-
<targets
|
|
19
|
-
<initiatives
|
|
20
|
-
<implementation_and_risk>重大项目写明前置依赖、资源投入、阶段 Gate
|
|
16
|
+
<analysis>每个核心判断形成“事实与来源 → 分析 → 战略含义 → 决策”闭环;分析框架只展开有可靠输入且会改变战略判断的部分,每个框架必须产出其支持的决策、取舍或资源调整,否则压缩为简要判断。任务数、运行次数和人员数量只能证明内部运行状态,不得直接证明市场需求、商业能力或竞争优势。事实注明来源、口径与时间,缺少可验证证据时转入数据缺口。</analysis>
|
|
17
|
+
<strategy_choice>说明所选方向、备选方案、选择依据、关键取舍和明确不做事项,并指出选择成立所依赖的假设;备选方案使用一致维度比较预期收益、成本、资源占用、周期、依赖、风险和退出条件。对承担增长或现金贡献的核心业务,写明目标客户与需求、产品或服务、定价依据、获客路径、单位交付成本或产能、毛利或现金贡献、回款周期和验证证据;缺失项转入数据缺口。</strategy_choice>
|
|
18
|
+
<targets>战略目标和重大举措使用“衡量指标与成功标准”:按事项选用经营结果、关键结果、里程碑、质量阈值或阶段 Gate;每个可量化指标包含定义、当前基线、目标值或验收阈值、期限和数据来源。收入、增长、客户和预算等重大目标写明计算公式与关键假设,并用基准或保守情景校验,不得只凭行业规模或经验客单价反推。足以改变某项目标、预算或扩张结论的收入、客户、定价、交付产能、成本或现金流基线未知时,该决策单元使用条件化表达,并写明数据闭环任务与下一阶段验证方案;其余章节仍按模板完整编制,基线审定后再固化受影响的目标、预算或扩张承诺。需要汇总时使用“战略衡量体系”,按核心结果、业务结果、领先指标和风险护栏组织。</targets>
|
|
19
|
+
<initiatives>每项重大举措围绕实际事项与业务需求,包含核心目标、基线或现状差距、关键任务、所需输入、实际产出、资源与依赖、里程碑、衡量指标与成功标准、风险与应对;关键任务写清连续执行步骤,前一任务的产出作为下一任务的输入,并写明继续、调整或停止的触发条件。分别表述实际产出、阶段验收和最终业务结果;报告、台账、模板或系统上线属于实际产出,阶段验收可使用里程碑、质量阈值或 Gate,最终业务结果使用可观察的经营变化或风险降低。</initiatives>
|
|
20
|
+
<implementation_and_risk>重大项目写明前置依赖、资源投入、阶段 Gate 和失败处置;优先级清单按可投入资源与实际执行能力排序,并写明并行上限、关键路径、暂不启动事项和资源不足时的取舍。重大风险使用可观察的触发阈值,并写明预防动作和应急动作;复盘机制写明输入数据、可作出的调整和复盘频率。</implementation_and_risk>
|
|
21
21
|
<length>执行摘要约 600–900 个中文字符且不超过一页;其他章节以完成决策单元为准,不用固定字数填充篇幅。</length>
|
|
22
|
-
<data_gaps
|
|
22
|
+
<data_gaps>关键事实无法从范围内来源获得时,增加“关键数据缺口闭环表”,字段包括缺口、影响的判断或决策、所需数据或输入、补齐动作和审定节点。</data_gaps>
|
|
23
23
|
<report_metadata>交付稿在标题下依次给出报告日期、研究对象、研究范围、数据截止日期、规划周期和版本六个紧凑字段,然后直接进入执行摘要;作者或编制方仅在任务明确提供时增加。</report_metadata>
|
|
24
|
-
<evidence_presentation
|
|
24
|
+
<evidence_presentation>正文事实使用来源、日期、口径、引用和措辞强度表达证据边界;引用通过脚注或“主要来源 / 参考资料”呈现。无法可靠支持且影响决策的内容转入关键数据缺口或省略。交付稿遵循共享 Clean deliverables 契约。</evidence_presentation>
|
|
25
25
|
<document_status>足以改变战略选择的关键输入尚未闭环时,文档标记为“战略初稿 / 待决策版”,不得标记为“正式版”或“决策就绪”;大纲完整、系统运行正常或任务执行成功,均不能替代关键商业输入闭环。</document_status>
|
|
26
|
-
<delivery_cleanup
|
|
26
|
+
<delivery_cleanup>逐章确认所有保留章节均已完成;应用本元素的全部验收标准后,删除整个 mirrorx_template_guidance 元素,再执行最终校验与上传;交付物不得保留本元素。</delivery_cleanup>
|
|
27
27
|
</mirrorx_template_guidance>
|
|
28
28
|
|
|
29
29
|
---
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
|
|
52
52
|
3. **总体目标**:【期末核心经营指标:营收、净利润、市场份额、合规零重大事故、资本节点等】
|
|
53
53
|
|
|
54
|
-
4.
|
|
54
|
+
4. **核心战略路径**:【支撑核心选择并进入资源配置与执行计划的最小必要路径集】
|
|
55
55
|
|
|
56
56
|
5. **核心资源需求**:【资金、核心人才、关键资质、技术投入、合规建设投入等概览】
|
|
57
57
|
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
|
|
218
218
|
### 6\.3 核心战略主题
|
|
219
219
|
|
|
220
|
-
|
|
220
|
+
提炼能够贯穿规划周期并进入资源配置的最小必要战略主题集;以下仅为可选示例:
|
|
221
221
|
|
|
222
222
|
1. 【产品创新与技术引领】
|
|
223
223
|
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
|
|
234
234
|
## 七、核心战略举措
|
|
235
235
|
|
|
236
|
-
>
|
|
236
|
+
> 每项举措围绕实际事项与业务需求,明确:**核心目标、现状差距、关键任务、所需输入与依赖、实际产出、时间节点、衡量指标与成功标准、调整 / 停止条件**。
|
|
237
237
|
>
|
|
238
238
|
>
|
|
239
239
|
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
|
|
268
268
|
- 精益运营与降本增效:核心流程优化、人均效能提升目标
|
|
269
269
|
|
|
270
|
-
### 7\.4
|
|
270
|
+
### 7\.4 组织能力与资源配置战略
|
|
271
271
|
|
|
272
272
|
- 组织架构优化方向:适配战略的组织形态调整、权责划分
|
|
273
273
|
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
|
|
330
330
|
表格
|
|
331
331
|
|
|
332
|
-
### 8\.2
|
|
332
|
+
### 8\.2 重大战略项目优先级清单
|
|
333
333
|
|
|
334
334
|
筛选支撑战略落地的核心项目,作为资源倾斜与重点管控对象。
|
|
335
335
|
|
|
@@ -357,7 +357,7 @@
|
|
|
357
357
|
|
|
358
358
|
表格
|
|
359
359
|
|
|
360
|
-
### 9\.3
|
|
360
|
+
### 9\.3 关键能力与资源配置计划
|
|
361
361
|
|
|
362
362
|
表格
|
|
363
363
|
|
|
@@ -395,7 +395,7 @@
|
|
|
395
395
|
|
|
396
396
|
### 11\.2 考核与激励机制
|
|
397
397
|
|
|
398
|
-
-
|
|
398
|
+
- 战略目标拆解为可执行事项与阶段结果,并与衡量指标、成功标准和复盘节点关联
|
|
399
399
|
|
|
400
400
|
- 合规指标一票否决:发生重大合规事故,取消对应部门与负责人年度评优资格
|
|
401
401
|
|