@stalfh233/omc-cli 0.5.0 → 0.5.1
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/LICENSE +21 -21
- package/README.md +359 -359
- package/coverage/m1-coverage-manifest-v1.json +1414 -1414
- package/dist/approval-flow.js +0 -0
- package/dist/approval-token.js +102 -0
- package/dist/args.js +0 -0
- package/dist/artifacts.js +0 -0
- package/dist/batch-call.js +0 -0
- package/dist/bench/call-face-eval.js +0 -0
- package/dist/bench/context-attribution.js +0 -0
- package/dist/bench/discovery-cost-eval.js +0 -0
- package/dist/bench/driver.js +0 -0
- package/dist/bench/evals.js +0 -0
- package/dist/bench/fake-http-server.js +65 -0
- package/dist/bench/instrument.js +0 -0
- package/dist/bench/intent-face-eval.js +40 -40
- package/dist/bench/run.js +0 -0
- package/dist/bench/scenario.js +0 -0
- package/dist/bench/types.js +0 -0
- package/dist/bi-wire.js +0 -0
- package/dist/bizservice-config.js +0 -0
- package/dist/call.js +0 -0
- package/dist/capability-absences.js +0 -0
- package/dist/capability-overview.js +0 -0
- package/dist/capability-shape.js +0 -0
- package/dist/cli-contract.js +38 -1
- package/dist/cli-output.js +8 -2
- package/dist/cli.js +9 -1
- package/dist/closest-match.js +0 -0
- package/dist/code-rules.js +0 -0
- package/dist/command-transport.js +0 -0
- package/dist/compound-writes.js +0 -0
- package/dist/compute.js +0 -0
- package/dist/config-store.js +0 -0
- package/dist/context.js +0 -0
- package/dist/contract-consistency.js +0 -0
- package/dist/contract-resources.js +0 -0
- package/dist/coverage-consistency.js +0 -0
- package/dist/coverage-registry.js +0 -0
- package/dist/coverage.js +0 -0
- package/dist/data-list-filter.js +0 -0
- package/dist/describe-cache.js +0 -0
- package/dist/discovery.js +0 -0
- package/dist/endpoints.js +0 -0
- package/dist/environment-policy.js +0 -0
- package/dist/execution-metadata.js +0 -0
- package/dist/fake/app.js +45 -0
- package/dist/fake/b2-registration.js +594 -0
- package/dist/fake/businessrule.js +242 -0
- package/dist/fake/datarule.js +72 -0
- package/dist/fake/dictionary.js +108 -0
- package/dist/fake/environment.js +30 -0
- package/dist/fake/field.js +167 -0
- package/dist/fake/form.js +101 -0
- package/dist/fake/index.js +121 -0
- package/dist/fake/list-view.js +289 -0
- package/dist/fake/model.js +136 -0
- package/dist/fake/online-js.js +18 -0
- package/dist/fake/report.js +253 -0
- package/dist/fake/routes.js +47 -0
- package/dist/fake/rule-lifecycle.js +37 -0
- package/dist/fake/runtime-data.js +367 -0
- package/dist/fake/state.js +67 -0
- package/dist/fake/workflow.js +364 -0
- package/dist/field-change.js +75 -7
- package/dist/field-families.js +59 -9
- package/dist/form-default.js +0 -0
- package/dist/form-layout.js +0 -0
- package/dist/form-support.js +0 -0
- package/dist/formula-lint.js +0 -0
- package/dist/goal-routes.js +16 -16
- package/dist/governed-execution.js +0 -0
- package/dist/graph.js +29 -29
- package/dist/human-summary.js +0 -0
- package/dist/identity.js +0 -0
- package/dist/intent/baseline.js +0 -0
- package/dist/intent/capabilities/bizservice.js +0 -0
- package/dist/intent/capabilities/businessrule.js +0 -0
- package/dist/intent/capabilities/datarule.js +0 -0
- package/dist/intent/capabilities/field.js +0 -0
- package/dist/intent/capabilities/form.js +0 -0
- package/dist/intent/capabilities/index.js +0 -0
- package/dist/intent/capabilities/listview.js +0 -0
- package/dist/intent/capabilities/model.js +0 -0
- package/dist/intent/capabilities/onlinejs.js +0 -0
- package/dist/intent/capabilities/report.js +0 -0
- package/dist/intent/capabilities/workflow.js +0 -0
- package/dist/intent/capability.js +0 -0
- package/dist/intent/cli.js +0 -0
- package/dist/intent/compare.js +0 -0
- package/dist/intent/compiler.js +0 -0
- package/dist/intent/dsl.js +0 -0
- package/dist/intent/plan-apply.js +0 -0
- package/dist/intent/plan-file.js +0 -0
- package/dist/intent/readback.js +0 -0
- package/dist/intent/schema.js +0 -0
- package/dist/intent/validation.js +0 -0
- package/dist/intent/yaml.js +0 -0
- package/dist/journal.js +0 -0
- package/dist/json-column.js +0 -0
- package/dist/lanes/app-contract.js +0 -0
- package/dist/lanes/app-coverage.js +0 -0
- package/dist/lanes/app.js +0 -0
- package/dist/lanes/apply-changes.js +0 -0
- package/dist/lanes/b2-registration-contract.js +0 -0
- package/dist/lanes/b2-registration-coverage.js +0 -0
- package/dist/lanes/b2-registration.js +0 -0
- package/dist/lanes/businessrule-contract.js +0 -0
- package/dist/lanes/businessrule-coverage.js +0 -0
- package/dist/lanes/businessrule.js +0 -0
- package/dist/lanes/contract-support.js +0 -0
- package/dist/lanes/coverage-declaration.js +0 -0
- package/dist/lanes/custom-page.js +0 -0
- package/dist/lanes/datarule-contract.js +0 -0
- package/dist/lanes/datarule-coverage.js +0 -0
- package/dist/lanes/datarule-protocol.js +0 -0
- package/dist/lanes/datarule.js +0 -0
- package/dist/lanes/dictionary-contract.js +0 -0
- package/dist/lanes/dictionary-coverage.js +0 -0
- package/dist/lanes/dictionary.js +0 -0
- package/dist/lanes/environment-contract.js +0 -0
- package/dist/lanes/environment-coverage.js +0 -0
- package/dist/lanes/environment.js +0 -0
- package/dist/lanes/field-contract.js +0 -0
- package/dist/lanes/field-coverage.js +0 -0
- package/dist/lanes/field.js +6 -1
- package/dist/lanes/folder-contract.js +0 -0
- package/dist/lanes/folder-coverage.js +0 -0
- package/dist/lanes/folder.js +0 -0
- package/dist/lanes/form-contract.js +0 -0
- package/dist/lanes/form-coverage.js +0 -0
- package/dist/lanes/form.js +0 -0
- package/dist/lanes/lane-ids.js +0 -0
- package/dist/lanes/list-view-contract.js +0 -0
- package/dist/lanes/list-view-coverage.js +0 -0
- package/dist/lanes/list-view-shapes.js +0 -0
- package/dist/lanes/list-view.js +0 -0
- package/dist/lanes/meta-contract.js +0 -0
- package/dist/lanes/meta.js +6 -0
- package/dist/lanes/model-contract.js +0 -0
- package/dist/lanes/model-coverage.js +0 -0
- package/dist/lanes/model.js +4 -2
- package/dist/lanes/online-js-contract.js +0 -0
- package/dist/lanes/online-js-coverage.js +0 -0
- package/dist/lanes/online-js.js +0 -0
- package/dist/lanes/org-tree.js +0 -0
- package/dist/lanes/organization.js +0 -0
- package/dist/lanes/report-contract.js +0 -0
- package/dist/lanes/report-coverage.js +0 -0
- package/dist/lanes/report.js +0 -0
- package/dist/lanes/rule-graph.js +0 -0
- package/dist/lanes/rule-lifecycle-contract.js +0 -0
- package/dist/lanes/rule-lifecycle-coverage.js +0 -0
- package/dist/lanes/rule-lifecycle.js +0 -0
- package/dist/lanes/runtime-data-contract.js +0 -0
- package/dist/lanes/runtime-data-coverage.js +0 -0
- package/dist/lanes/runtime-data.js +0 -0
- package/dist/lanes/workflow-contract.js +0 -0
- package/dist/lanes/workflow-coverage.js +0 -0
- package/dist/lanes/workflow.js +0 -0
- package/dist/model-purge.js +0 -0
- package/dist/model-scaffold.js +0 -0
- package/dist/omc-core-lazy.js +0 -0
- package/dist/online-js-layout.js +0 -0
- package/dist/online-js-source.js +28 -28
- package/dist/package-tool.js +0 -0
- package/dist/package.js +0 -0
- package/dist/path-projection.js +0 -0
- package/dist/plan.js +0 -0
- package/dist/read.js +0 -0
- package/dist/recipes/b2-registration.js +0 -0
- package/dist/recipes/businessrule.js +0 -0
- package/dist/recipes/datarule.js +0 -0
- package/dist/recipes/dictionary.js +0 -0
- package/dist/recipes/field.js +0 -0
- package/dist/recipes/form.js +0 -0
- package/dist/recipes/list-view.js +0 -0
- package/dist/recipes/model.js +0 -0
- package/dist/recipes/online-js.js +0 -0
- package/dist/recipes/runtime-data.js +0 -0
- package/dist/recipes/shared.js +0 -0
- package/dist/recipes/workflow.js +0 -0
- package/dist/redact.js +0 -0
- package/dist/refusal-guidance.js +0 -0
- package/dist/rollback-spec.js +0 -0
- package/dist/rollback.js +0 -0
- package/dist/rule-support.js +0 -0
- package/dist/rule-when.js +0 -0
- package/dist/runtime-support.js +0 -0
- package/dist/script.js +0 -0
- package/dist/server.js +92 -0
- package/dist/service-doctor.js +0 -0
- package/dist/session-manager.js +0 -0
- package/dist/session.js +12 -0
- package/dist/skills.js +12 -2
- package/dist/sqlite-warning-filter.js +0 -0
- package/dist/support.js +0 -0
- package/dist/token-cache.js +0 -0
- package/dist/tool-types.js +0 -0
- package/dist/tools.js +0 -0
- package/dist/usage-log.js +0 -0
- package/dist/wire.js +0 -0
- package/dist/workflow-support.js +0 -0
- package/dist/write-lease.js +0 -0
- package/dist/write-lock.js +0 -0
- package/dist/write.js +0 -0
- package/dist/zip.js +0 -0
- package/docs/images/omc-nixi/README.md +41 -41
- package/docs/omc-introduction.md +851 -851
- package/docs/tool-surface-map.md +42 -42
- package/package.json +4 -4
- package/skills/omc-acceptance-criteria.md +50 -50
- package/skills/omc-business-configuration.md +334 -334
- package/skills/omc-capabilities.md +214 -214
- package/skills/omc-capability-scouting.md +55 -55
- package/skills/omc-config-draft-review.md +175 -175
- package/skills/omc-five-piece-flow.md +35 -35
- package/skills/omc-glossary.md +86 -86
- package/skills/omc-refusals.md +127 -127
- package/skills/omc-requirement-analysis.md +161 -161
- package/skills/omc-requirement-vocabulary.md +61 -61
- package/skills/omc-start-here.md +106 -106
- package/skills/omc-tool-selection.md +119 -119
- package/skills/omc-write-hazards.md +200 -200
- package/dist/lanes/organization-coverage.js +0 -27
package/dist/graph.js
CHANGED
|
@@ -452,30 +452,30 @@ export async function publishGraphPull(session, concurrency = DEFAULT_PULL_CONCU
|
|
|
452
452
|
// D-state in folio_wait_bit_common). One transaction + memory journal
|
|
453
453
|
// + synchronous=OFF makes the build effectively free.
|
|
454
454
|
db.exec("PRAGMA journal_mode=MEMORY; PRAGMA synchronous=OFF;");
|
|
455
|
-
db.exec(`BEGIN;
|
|
456
|
-
CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
|
|
457
|
-
CREATE TABLE rules (
|
|
458
|
-
schema_code TEXT NOT NULL,
|
|
459
|
-
rule_code TEXT NOT NULL,
|
|
460
|
-
name TEXT,
|
|
461
|
-
enabled INTEGER,
|
|
462
|
-
status TEXT,
|
|
463
|
-
default_rule INTEGER,
|
|
464
|
-
row_id TEXT NOT NULL,
|
|
465
|
-
graph_sha256 TEXT NOT NULL,
|
|
466
|
-
PRIMARY KEY (schema_code, rule_code)
|
|
467
|
-
);
|
|
468
|
-
CREATE TABLE edges (
|
|
469
|
-
kind TEXT NOT NULL,
|
|
470
|
-
code TEXT NOT NULL,
|
|
471
|
-
schema_code TEXT NOT NULL,
|
|
472
|
-
rule_code TEXT NOT NULL,
|
|
473
|
-
node_code TEXT,
|
|
474
|
-
node_type TEXT,
|
|
475
|
-
via TEXT NOT NULL
|
|
476
|
-
);
|
|
477
|
-
CREATE INDEX edges_lookup ON edges(kind, code);
|
|
478
|
-
CREATE TABLE gaps (kind TEXT NOT NULL, ref TEXT NOT NULL, note TEXT);
|
|
455
|
+
db.exec(`BEGIN;
|
|
456
|
+
CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
|
|
457
|
+
CREATE TABLE rules (
|
|
458
|
+
schema_code TEXT NOT NULL,
|
|
459
|
+
rule_code TEXT NOT NULL,
|
|
460
|
+
name TEXT,
|
|
461
|
+
enabled INTEGER,
|
|
462
|
+
status TEXT,
|
|
463
|
+
default_rule INTEGER,
|
|
464
|
+
row_id TEXT NOT NULL,
|
|
465
|
+
graph_sha256 TEXT NOT NULL,
|
|
466
|
+
PRIMARY KEY (schema_code, rule_code)
|
|
467
|
+
);
|
|
468
|
+
CREATE TABLE edges (
|
|
469
|
+
kind TEXT NOT NULL,
|
|
470
|
+
code TEXT NOT NULL,
|
|
471
|
+
schema_code TEXT NOT NULL,
|
|
472
|
+
rule_code TEXT NOT NULL,
|
|
473
|
+
node_code TEXT,
|
|
474
|
+
node_type TEXT,
|
|
475
|
+
via TEXT NOT NULL
|
|
476
|
+
);
|
|
477
|
+
CREATE INDEX edges_lookup ON edges(kind, code);
|
|
478
|
+
CREATE TABLE gaps (kind TEXT NOT NULL, ref TEXT NOT NULL, note TEXT);
|
|
479
479
|
`);
|
|
480
480
|
const insertMeta = db.prepare("INSERT INTO meta (key, value) VALUES (?, ?)");
|
|
481
481
|
for (const [key, value] of Object.entries(data.meta))
|
|
@@ -491,9 +491,9 @@ export async function publishGraphPull(session, concurrency = DEFAULT_PULL_CONCU
|
|
|
491
491
|
insertGap.run(gap.kind, gap.ref, gap.note ?? null);
|
|
492
492
|
// FTS5 mirrors rules (code+name) for `graph search`; one rebuild after
|
|
493
493
|
// the bulk insert is cheaper than per-row triggers on a wholesale rebuild.
|
|
494
|
-
db.exec(`
|
|
495
|
-
CREATE VIRTUAL TABLE rules_fts USING fts5(rule_code, name, content='rules', content_rowid='rowid');
|
|
496
|
-
INSERT INTO rules_fts(rules_fts) VALUES('rebuild');
|
|
494
|
+
db.exec(`
|
|
495
|
+
CREATE VIRTUAL TABLE rules_fts USING fts5(rule_code, name, content='rules', content_rowid='rowid');
|
|
496
|
+
INSERT INTO rules_fts(rules_fts) VALUES('rebuild');
|
|
497
497
|
`);
|
|
498
498
|
db.exec("COMMIT;");
|
|
499
499
|
}
|
|
@@ -618,8 +618,8 @@ export function searchGraphRules(term, limit = 20) {
|
|
|
618
618
|
if (tokens.length > 0) {
|
|
619
619
|
const quoted = tokens.map((token, index) => `"${token.replaceAll('"', '""')}"${index === tokens.length - 1 ? "*" : ""}`).join(" ");
|
|
620
620
|
const rows = db
|
|
621
|
-
.prepare(`SELECT r.schema_code, r.rule_code, r.name, r.enabled, r.status
|
|
622
|
-
FROM rules_fts JOIN rules r ON r.rowid = rules_fts.rowid
|
|
621
|
+
.prepare(`SELECT r.schema_code, r.rule_code, r.name, r.enabled, r.status
|
|
622
|
+
FROM rules_fts JOIN rules r ON r.rowid = rules_fts.rowid
|
|
623
623
|
WHERE rules_fts MATCH ? ORDER BY bm25(rules_fts), r.schema_code, r.rule_code LIMIT ?`)
|
|
624
624
|
.all(quoted, limit);
|
|
625
625
|
const refsFor = db.prepare("SELECT kind, code FROM edges WHERE schema_code = ? AND rule_code = ? ORDER BY kind, code");
|
package/dist/human-summary.js
CHANGED
|
File without changes
|
package/dist/identity.js
CHANGED
|
File without changes
|
package/dist/intent/baseline.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/intent/cli.js
CHANGED
|
File without changes
|
package/dist/intent/compare.js
CHANGED
|
File without changes
|
package/dist/intent/compiler.js
CHANGED
|
File without changes
|
package/dist/intent/dsl.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/intent/plan-file.js
CHANGED
|
File without changes
|
package/dist/intent/readback.js
CHANGED
|
File without changes
|
package/dist/intent/schema.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/intent/yaml.js
CHANGED
|
File without changes
|
package/dist/journal.js
CHANGED
|
File without changes
|
package/dist/json-column.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/app.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/datarule.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/dictionary.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/field.js
CHANGED
|
@@ -412,7 +412,10 @@ export function registerFieldLane(tools) {
|
|
|
412
412
|
// wire body (src/field-change.ts), so configure_model and intent share it.
|
|
413
413
|
assertNoSelfSchemaAggregation(args, published);
|
|
414
414
|
await assertNoChildSchemaAggregation(session, args.schemaCode, args.propertyType, args.options ?? {});
|
|
415
|
-
|
|
415
|
+
// 目标版本决定 optionsSet 形状:8.2 以下要补 optionStructure/treeSelect
|
|
416
|
+
// (cpdocs issue #8:缺键让设计器选项弹窗硬崩)。
|
|
417
|
+
const targetVersion = session.detectedVersion();
|
|
418
|
+
const prepared = prepareFieldChange({ ...args, ...(targetVersion ? { targetVersion } : {}) });
|
|
416
419
|
let performed;
|
|
417
420
|
try {
|
|
418
421
|
performed = await wireCall(session, { path: ENDPOINTS.fieldCreate, method: "POST", body: fieldChangeWireBody(args, prepared) });
|
|
@@ -515,10 +518,12 @@ async function runFieldUpdate(session, args) {
|
|
|
515
518
|
assertNoSelfSchemaAggregation({ schemaCode: args.schemaCode, propertyType: record.type ?? record.propertyType, options: args.options }, publishedRows);
|
|
516
519
|
await assertNoChildSchemaAggregation(session, args.schemaCode, record.type ?? record.propertyType, args.options);
|
|
517
520
|
}
|
|
521
|
+
const targetVersion = session.detectedVersion();
|
|
518
522
|
const update = {
|
|
519
523
|
schemaCode: args.schemaCode,
|
|
520
524
|
code: args.code,
|
|
521
525
|
base: record,
|
|
526
|
+
...(targetVersion ? { targetVersion } : {}),
|
|
522
527
|
...(args.name !== undefined ? { name: args.name } : {}),
|
|
523
528
|
...(args.name_i18n !== undefined ? { name_i18n: args.name_i18n } : {}),
|
|
524
529
|
...(args.options !== undefined ? { options: args.options } : {}),
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/folder.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/form.js
CHANGED
|
File without changes
|
package/dist/lanes/lane-ids.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/list-view.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/lanes/meta.js
CHANGED
|
@@ -239,6 +239,12 @@ export function registerMetaLane(tools) {
|
|
|
239
239
|
const session = await ctx.sessions.session(args.environment);
|
|
240
240
|
const version = session.detectedVersion();
|
|
241
241
|
steps.push({ step: "登录", ok: true, enterpriseId: session.enterpriseId(), administrator: session.administrator() });
|
|
242
|
+
// A deployment whose system/config carries an unusual/absent `client`
|
|
243
|
+
// blob still logs in (client_secret is optional). Report it as a WARN
|
|
244
|
+
// instead of letting it read as a failed self-check.
|
|
245
|
+
const loginNotes = session.loginNotes();
|
|
246
|
+
if (loginNotes.length > 0)
|
|
247
|
+
steps.push({ step: "OAuth 客户端配置", ok: null, notes: loginNotes });
|
|
242
248
|
const familyOk = version ? version.startsWith(ctx.manifest.version_family + ".") : null;
|
|
243
249
|
steps.push({
|
|
244
250
|
step: "版本族",
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/model.js
CHANGED
|
@@ -1120,8 +1120,9 @@ export function registerModelLane(tools) {
|
|
|
1120
1120
|
for (const row of wireRows((await wireCall(session, { path: ENDPOINTS.fieldList, query: { schemaCode: args.code, isPublish } })).data))
|
|
1121
1121
|
existingFields.set(String(row.code ?? row.propertyCode ?? ""), row);
|
|
1122
1122
|
}
|
|
1123
|
+
const configureTargetVersion = session.detectedVersion();
|
|
1123
1124
|
for (const entry of entries) {
|
|
1124
|
-
const input = fieldChangeInputOf(args.code, entry);
|
|
1125
|
+
const input = fieldChangeInputOf(args.code, entry, configureTargetVersion);
|
|
1125
1126
|
failed = await run(results.length, "field.create", async () => {
|
|
1126
1127
|
const existing = existingFields.get(entry.code);
|
|
1127
1128
|
if (existing !== undefined) {
|
|
@@ -1237,12 +1238,13 @@ function fieldEntriesOf(args) {
|
|
|
1237
1238
|
assertFieldFamilyAllowed(legacy);
|
|
1238
1239
|
return [legacy];
|
|
1239
1240
|
}
|
|
1240
|
-
function fieldChangeInputOf(schemaCode, entry) {
|
|
1241
|
+
function fieldChangeInputOf(schemaCode, entry, targetVersion) {
|
|
1241
1242
|
return {
|
|
1242
1243
|
schemaCode,
|
|
1243
1244
|
code: entry.code,
|
|
1244
1245
|
name: entry.name,
|
|
1245
1246
|
propertyType: entry.propertyType,
|
|
1247
|
+
...(targetVersion ? { targetVersion } : {}),
|
|
1246
1248
|
...(entry.options ? { options: entry.options } : {}),
|
|
1247
1249
|
...(entry.choices ? { choices: entry.choices } : {}),
|
|
1248
1250
|
...(entry.relativeCode ? { relativeCode: entry.relativeCode } : {}),
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/online-js.js
CHANGED
|
File without changes
|
package/dist/lanes/org-tree.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/report.js
CHANGED
|
File without changes
|
package/dist/lanes/rule-graph.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/lanes/workflow.js
CHANGED
|
File without changes
|
package/dist/model-purge.js
CHANGED
|
File without changes
|
package/dist/model-scaffold.js
CHANGED
|
File without changes
|
package/dist/omc-core-lazy.js
CHANGED
|
File without changes
|
package/dist/online-js-layout.js
CHANGED
|
File without changes
|
package/dist/online-js-source.js
CHANGED
|
@@ -15,34 +15,34 @@ import { ToolRefusalError } from "./tool-types.js";
|
|
|
15
15
|
* to replace it.
|
|
16
16
|
*/
|
|
17
17
|
export const PLATFORM_LIFECYCLE_WRAPPER_MARKER = "(function(form)";
|
|
18
|
-
export const PLATFORM_DEFAULT_LIFECYCLE_SCRIPT = `/**
|
|
19
|
-
* 用户自定义JS区域;
|
|
20
|
-
* 注:外部链接的JS统一放置在HTML中,原有script标签下的js统一放置在当前编码区域
|
|
21
|
-
* 使用环境变量,可通过"$env("唤醒提示框,并通过$env(分类名称.变量名称)的方式使用
|
|
22
|
-
*/
|
|
23
|
-
(function(form){
|
|
24
|
-
/**
|
|
25
|
-
* 事件绑定,form.on
|
|
26
|
-
* @param eventType 事件类型
|
|
27
|
-
* @params function 事件
|
|
28
|
-
* @param cover true, false 是否覆盖root的生命周期 默认不覆盖
|
|
29
|
-
*/
|
|
30
|
-
//数据加载后,渲染之前,this为window
|
|
31
|
-
form.on('onLoad',function(data, dataPermission){},'cover');
|
|
32
|
-
//渲染完成后
|
|
33
|
-
form.on('onRendered',function(data){});
|
|
34
|
-
//内置校验完成后,返回false阻止提交
|
|
35
|
-
form.on('onValidate',function(action,data){});
|
|
36
|
-
//操作前(包含自定义按钮)执行,返回false阻止按钮操作
|
|
37
|
-
form.on('onPreAction',function(action,data){});
|
|
38
|
-
//自定义按钮执行
|
|
39
|
-
form.on('onCustomAction',function(action,data){});
|
|
40
|
-
//操作完成后执行
|
|
41
|
-
form.on('onActionDone',function(action,data,httpRes){});
|
|
42
|
-
//表单字段打印数据格式扩展,可自行定义调用打印模板时,表单字段对应所打印数据的内容
|
|
43
|
-
form.on('onPrintFormDataHandle',function(vm, printData, sourceData, formValues, key, locale, printTemplateCode, control, dataType, sheetData){});
|
|
44
|
-
//流程日志打印数据格式扩展,可自行定义调用打印模板时,流程日志对应所打印数据的内容
|
|
45
|
-
form.on('onPrintWorkflowLogDataHandle',function(vm, sourceData, printData, locale, printTemplateCode){});
|
|
18
|
+
export const PLATFORM_DEFAULT_LIFECYCLE_SCRIPT = `/**
|
|
19
|
+
* 用户自定义JS区域;
|
|
20
|
+
* 注:外部链接的JS统一放置在HTML中,原有script标签下的js统一放置在当前编码区域
|
|
21
|
+
* 使用环境变量,可通过"$env("唤醒提示框,并通过$env(分类名称.变量名称)的方式使用
|
|
22
|
+
*/
|
|
23
|
+
(function(form){
|
|
24
|
+
/**
|
|
25
|
+
* 事件绑定,form.on
|
|
26
|
+
* @param eventType 事件类型
|
|
27
|
+
* @params function 事件
|
|
28
|
+
* @param cover true, false 是否覆盖root的生命周期 默认不覆盖
|
|
29
|
+
*/
|
|
30
|
+
//数据加载后,渲染之前,this为window
|
|
31
|
+
form.on('onLoad',function(data, dataPermission){},'cover');
|
|
32
|
+
//渲染完成后
|
|
33
|
+
form.on('onRendered',function(data){});
|
|
34
|
+
//内置校验完成后,返回false阻止提交
|
|
35
|
+
form.on('onValidate',function(action,data){});
|
|
36
|
+
//操作前(包含自定义按钮)执行,返回false阻止按钮操作
|
|
37
|
+
form.on('onPreAction',function(action,data){});
|
|
38
|
+
//自定义按钮执行
|
|
39
|
+
form.on('onCustomAction',function(action,data){});
|
|
40
|
+
//操作完成后执行
|
|
41
|
+
form.on('onActionDone',function(action,data,httpRes){});
|
|
42
|
+
//表单字段打印数据格式扩展,可自行定义调用打印模板时,表单字段对应所打印数据的内容
|
|
43
|
+
form.on('onPrintFormDataHandle',function(vm, printData, sourceData, formValues, key, locale, printTemplateCode, control, dataType, sheetData){});
|
|
44
|
+
//流程日志打印数据格式扩展,可自行定义调用打印模板时,流程日志对应所打印数据的内容
|
|
45
|
+
form.on('onPrintWorkflowLogDataHandle',function(vm, sourceData, printData, locale, printTemplateCode){});
|
|
46
46
|
})`;
|
|
47
47
|
/** The lifecycle events the platform dispatches; anything else is a typo the runtime silently drops (or throws on). */
|
|
48
48
|
export const ONLINE_JS_EVENTS = new Set([
|
package/dist/package-tool.js
CHANGED
|
File without changes
|
package/dist/package.js
CHANGED
|
File without changes
|
package/dist/path-projection.js
CHANGED
|
File without changes
|
package/dist/plan.js
CHANGED
|
File without changes
|
package/dist/read.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/recipes/datarule.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/recipes/field.js
CHANGED
|
File without changes
|
package/dist/recipes/form.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/recipes/model.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/recipes/shared.js
CHANGED
|
File without changes
|
package/dist/recipes/workflow.js
CHANGED
|
File without changes
|
package/dist/redact.js
CHANGED
|
File without changes
|
package/dist/refusal-guidance.js
CHANGED
|
File without changes
|
package/dist/rollback-spec.js
CHANGED
|
File without changes
|
package/dist/rollback.js
CHANGED
|
File without changes
|
package/dist/rule-support.js
CHANGED
|
File without changes
|
package/dist/rule-when.js
CHANGED
|
File without changes
|
package/dist/runtime-support.js
CHANGED
|
File without changes
|
package/dist/script.js
CHANGED
|
File without changes
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { randomBytes } from "node:crypto";
|
|
5
|
+
import { realpathSync } from "node:fs";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { buildToolRegistry, makeToolContext } from "./tools.js";
|
|
8
|
+
import { SessionManager } from "./session-manager.js";
|
|
9
|
+
import { redact, redactError } from "./redact.js";
|
|
10
|
+
import { ConfigStore } from "./config-store.js";
|
|
11
|
+
import { contractMarkdown, contractResourceUri, LANE_CONTRACTS, shortToolDescription } from "./contract-resources.js";
|
|
12
|
+
import { listSkills, readSkill } from "./skills.js";
|
|
13
|
+
export function createMcpServer(options = {}) {
|
|
14
|
+
const context = makeToolContext({
|
|
15
|
+
sessions: options.sessions ?? new SessionManager(new ConfigStore()),
|
|
16
|
+
artifactsDir: options.artifactsDir,
|
|
17
|
+
tokenKey: options.tokenKey ?? randomBytes(32).toString("base64"),
|
|
18
|
+
tokenTtlMs: options.tokenTtlMs,
|
|
19
|
+
});
|
|
20
|
+
const secrets = options.secrets ?? (() => []);
|
|
21
|
+
const server = new McpServer({ name: "omc-cli", version: "0.1.0" }, {
|
|
22
|
+
capabilities: { tools: {}, resources: {} },
|
|
23
|
+
instructions: "Governed CloudPivot 8.6 configuration server. Tool schemas are self-describing (field families, relation options, rule nodeGraph, workflow template, formData, and the two-step approval flow). Methodology is served as MCP resources under omc://skills/ (five-piece flow, tool selection, acceptance criteria, requirement analysis, capability scouting, glossary, config draft review); read them with resources/list + resources/read rather than reading repository source. Before ANY write, read omc://skills/omc-config-draft-review: present the design (exact names/codes/types, layout, rule graph, view) as a plain-language draft and get explicit human approval first — the conversational human gate (approval granularity is the enumerated change package; an interrupted package loses its approval and resuming needs a fresh draft and go-ahead). Then: call without approvalToken to preview the plan, approval.request to get a token (the machine gate — it carries no human check), re-call with it. Production environments refuse writes by default (dual-key grant). Deliver ONE closing report per run — never interrupt per step.",
|
|
24
|
+
});
|
|
25
|
+
const register = server.tool.bind(server);
|
|
26
|
+
for (const definition of buildToolRegistry()) {
|
|
27
|
+
register(definition.name, shortToolDescription(definition.name, definition.kind, definition.lane) ?? definition.description, definition.inputSchema, async (args) => {
|
|
28
|
+
try {
|
|
29
|
+
const result = await definition.handler(context, args, definition);
|
|
30
|
+
return { content: [{ type: "text", text: redact(result, secrets()) }] };
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
const refusal = error.payload;
|
|
34
|
+
if (refusal)
|
|
35
|
+
return { content: [{ type: "text", text: redact(refusal, secrets()) }] };
|
|
36
|
+
const redacted = redactError(error, secrets());
|
|
37
|
+
return { content: [{ type: "text", text: redact({ status: "error", message: redacted.message }, secrets()) }], isError: true };
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
registerSkillResources(server);
|
|
42
|
+
registerContractResources(server);
|
|
43
|
+
return { server, context };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Serve the package's methodology notes as MCP resources so any client can
|
|
47
|
+
* read them on demand (host-agnostic) instead of the agent globbing the
|
|
48
|
+
* filesystem for them. Each skill file's YAML frontmatter supplies its name
|
|
49
|
+
* and description.
|
|
50
|
+
*/
|
|
51
|
+
function registerSkillResources(server) {
|
|
52
|
+
for (const entry of listSkills()) {
|
|
53
|
+
const document = readSkill(entry.name);
|
|
54
|
+
if (document === undefined)
|
|
55
|
+
continue;
|
|
56
|
+
server.registerResource(entry.name, entry.uri, { title: entry.name, description: entry.description, mimeType: "text/markdown" }, async (uri) => ({ contents: [{ uri: uri.href, mimeType: "text/markdown", text: document.content }] }));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function registerContractResources(server) {
|
|
60
|
+
for (const contract of LANE_CONTRACTS) {
|
|
61
|
+
const text = contractMarkdown(contract);
|
|
62
|
+
server.registerResource(`contract-${contract.lane}`, contractResourceUri(contract), {
|
|
63
|
+
title: `${contract.lane} contract`,
|
|
64
|
+
description: `CloudPivot ${contract.family} contract for ${contract.lane}; reference ${contract.referenceVersion}`,
|
|
65
|
+
mimeType: "text/markdown",
|
|
66
|
+
}, async (uri) => ({ contents: [{ uri: uri.href, mimeType: "text/markdown", text }] }));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export async function runStdioServer(options = {}) {
|
|
70
|
+
const { server } = createMcpServer(options);
|
|
71
|
+
const transport = new StdioServerTransport();
|
|
72
|
+
await server.connect(transport);
|
|
73
|
+
}
|
|
74
|
+
function isProcessEntryPoint() {
|
|
75
|
+
const entry = process.argv[1];
|
|
76
|
+
if (!entry)
|
|
77
|
+
return false;
|
|
78
|
+
try {
|
|
79
|
+
return realpathSync(entry) === fileURLToPath(import.meta.url);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (isProcessEntryPoint()) {
|
|
86
|
+
runStdioServer().catch((error) => {
|
|
87
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export { buildToolRegistry, makeToolContext };
|
|
92
|
+
//# sourceMappingURL=server.js.map
|
package/dist/service-doctor.js
CHANGED
|
File without changes
|
package/dist/session-manager.js
CHANGED
|
File without changes
|