@llm-dev-ops/agentics-cli 2.7.2 → 2.7.4
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/dist/cli/index.js +19 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +21 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/synthesis/ask-artifact-writer.d.ts.map +1 -1
- package/dist/synthesis/ask-artifact-writer.js +80 -1
- package/dist/synthesis/ask-artifact-writer.js.map +1 -1
- package/dist/synthesis/domain-unit-registry.d.ts.map +1 -1
- package/dist/synthesis/domain-unit-registry.js +35 -13
- package/dist/synthesis/domain-unit-registry.js.map +1 -1
- package/dist/synthesis/simulation-renderers.d.ts.map +1 -1
- package/dist/synthesis/simulation-renderers.js +124 -54
- package/dist/synthesis/simulation-renderers.js.map +1 -1
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* permitted I/O path and never throws.
|
|
15
15
|
*/
|
|
16
16
|
import { loadUnitEconomics, buildFinancialModelFromUnitEconomics, enforceManifestConsistency, } from './unit-economics-loader.js';
|
|
17
|
+
import { classifySector } from './domain-unit-registry.js';
|
|
17
18
|
import { fcvTag, countFcvTags, fcvTagKeys } from './financial-claim-extractor.js';
|
|
18
19
|
import { recordDegradation } from '../observability/degradations.js';
|
|
19
20
|
import { classifyLaborIntensity, isLaborIntensive, workforceRiskTemplate, workforceRaciTemplate, workforceSensitivityRow, estimateWorkforceExposure, } from './domain-labor-classifier.js';
|
|
@@ -493,63 +494,132 @@ function estimateFinancialsFromQuery(query) {
|
|
|
493
494
|
}
|
|
494
495
|
}
|
|
495
496
|
}
|
|
496
|
-
//
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
497
|
+
// ADR-PIPELINE-095 — Sector-aware industry detection.
|
|
498
|
+
//
|
|
499
|
+
// Pre-095 this function used keyword `lower.includes()` checks that were
|
|
500
|
+
// checked in the WRONG order: `isFinancial` (matched on "financial
|
|
501
|
+
// operations") fired before `isSustainability`, so an Archibus / workplace-
|
|
502
|
+
// strategy / sustainability brief got costPerEmployee=$30 financial-services
|
|
503
|
+
// defaults that diverged from `unit-economics.json`'s sector-derived numbers.
|
|
504
|
+
//
|
|
505
|
+
// Now: delegate to `classifySector` first (the same classifier that drives
|
|
506
|
+
// unit-economics), so a brief identified as `commercial-real-estate`,
|
|
507
|
+
// `hospitality`, `manufacturing` etc. picks numbers consistent with the
|
|
508
|
+
// financial model. Only when the sector is `unknown` do we fall through to
|
|
509
|
+
// the keyword detector — and that detector now checks `isSustainability`
|
|
510
|
+
// before `isFinancial` so sustainability briefs that mention "financial
|
|
511
|
+
// operations" don't get misrouted.
|
|
512
|
+
const sectorClass = classifySector(query);
|
|
506
513
|
let industryLabel = 'enterprise';
|
|
507
514
|
let costPerEmployee = 25;
|
|
508
515
|
let savingsMultiplier = 50;
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
516
|
+
switch (sectorClass) {
|
|
517
|
+
case 'commercial-real-estate':
|
|
518
|
+
costPerEmployee = 30;
|
|
519
|
+
savingsMultiplier = 50;
|
|
520
|
+
industryLabel = 'workplace optimization';
|
|
521
|
+
break;
|
|
522
|
+
case 'hospitality':
|
|
523
|
+
costPerEmployee = 25;
|
|
524
|
+
savingsMultiplier = 50;
|
|
525
|
+
industryLabel = 'hospitality';
|
|
526
|
+
break;
|
|
527
|
+
case 'airline-catering':
|
|
528
|
+
costPerEmployee = 30;
|
|
529
|
+
savingsMultiplier = 60;
|
|
530
|
+
industryLabel = 'airline catering';
|
|
531
|
+
break;
|
|
532
|
+
case 'fleet':
|
|
533
|
+
costPerEmployee = 25;
|
|
534
|
+
savingsMultiplier = 55;
|
|
535
|
+
industryLabel = 'fleet';
|
|
536
|
+
break;
|
|
537
|
+
case 'retail':
|
|
538
|
+
costPerEmployee = 15;
|
|
539
|
+
savingsMultiplier = 40;
|
|
540
|
+
industryLabel = 'retail';
|
|
541
|
+
break;
|
|
542
|
+
case 'manufacturing':
|
|
543
|
+
costPerEmployee = 22;
|
|
544
|
+
savingsMultiplier = 55;
|
|
545
|
+
industryLabel = 'manufacturing';
|
|
546
|
+
break;
|
|
547
|
+
case 'healthcare':
|
|
548
|
+
costPerEmployee = 30;
|
|
549
|
+
savingsMultiplier = 65;
|
|
550
|
+
industryLabel = 'healthcare';
|
|
551
|
+
break;
|
|
552
|
+
case 'data-center':
|
|
553
|
+
costPerEmployee = 30;
|
|
554
|
+
savingsMultiplier = 55;
|
|
555
|
+
industryLabel = 'data center';
|
|
556
|
+
break;
|
|
557
|
+
case 'call-center':
|
|
558
|
+
costPerEmployee = 15;
|
|
559
|
+
savingsMultiplier = 45;
|
|
560
|
+
industryLabel = 'call center';
|
|
561
|
+
break;
|
|
562
|
+
default: {
|
|
563
|
+
// Sector unknown — use keyword detector. Order matters: sustainability,
|
|
564
|
+
// pharma, healthcare, manufacturing, utility BEFORE the broader
|
|
565
|
+
// financial / retail / consumer-goods / professional-services nets so
|
|
566
|
+
// a more-specific signal wins over generic words like "financial".
|
|
567
|
+
const isPharma = lower.includes('pharma') || lower.includes('drug') || lower.includes('gxp');
|
|
568
|
+
const isHealthcare = lower.includes('healthcare') || lower.includes('hospital') || lower.includes('patient');
|
|
569
|
+
const isManufacturing = lower.includes('manufacturing') || lower.includes('factory') || lower.includes('production line');
|
|
570
|
+
const isUtility = lower.includes('water') || lower.includes('utility') || lower.includes('energy') || lower.includes('grid');
|
|
571
|
+
const isSustainability = lower.includes('sustainability') || lower.includes('emissions') || lower.includes('carbon') || lower.includes('esg');
|
|
572
|
+
const isFinancial = lower.includes('financial') || lower.includes('banking') || lower.includes('insurance');
|
|
573
|
+
const isRetail = lower.includes('retail') || lower.includes('grocery') || lower.includes('store');
|
|
574
|
+
const isProfessionalServices = lower.includes('professional services') || lower.includes('consulting') || lower.includes('advisory');
|
|
575
|
+
const isConsumerGoods = lower.includes('consumer goods') || lower.includes('cpg') || lower.includes('fmcg') || lower.includes('packaging');
|
|
576
|
+
if (isPharma) {
|
|
577
|
+
costPerEmployee = 35;
|
|
578
|
+
savingsMultiplier = 80;
|
|
579
|
+
industryLabel = 'pharmaceutical';
|
|
580
|
+
}
|
|
581
|
+
else if (isHealthcare) {
|
|
582
|
+
costPerEmployee = 30;
|
|
583
|
+
savingsMultiplier = 65;
|
|
584
|
+
industryLabel = 'healthcare';
|
|
585
|
+
}
|
|
586
|
+
else if (isManufacturing) {
|
|
587
|
+
costPerEmployee = 22;
|
|
588
|
+
savingsMultiplier = 55;
|
|
589
|
+
industryLabel = 'manufacturing';
|
|
590
|
+
}
|
|
591
|
+
else if (isUtility) {
|
|
592
|
+
costPerEmployee = 20;
|
|
593
|
+
savingsMultiplier = 55;
|
|
594
|
+
industryLabel = 'utility infrastructure';
|
|
595
|
+
}
|
|
596
|
+
else if (isSustainability) {
|
|
597
|
+
costPerEmployee = 25;
|
|
598
|
+
savingsMultiplier = 50;
|
|
599
|
+
industryLabel = 'sustainability';
|
|
600
|
+
}
|
|
601
|
+
else if (isFinancial) {
|
|
602
|
+
costPerEmployee = 30;
|
|
603
|
+
savingsMultiplier = 60;
|
|
604
|
+
industryLabel = 'financial services';
|
|
605
|
+
}
|
|
606
|
+
else if (isRetail) {
|
|
607
|
+
costPerEmployee = 15;
|
|
608
|
+
savingsMultiplier = 40;
|
|
609
|
+
industryLabel = 'retail';
|
|
610
|
+
}
|
|
611
|
+
else if (isConsumerGoods) {
|
|
612
|
+
costPerEmployee = 20;
|
|
613
|
+
savingsMultiplier = 45;
|
|
614
|
+
industryLabel = 'consumer goods';
|
|
615
|
+
}
|
|
616
|
+
else if (isProfessionalServices) {
|
|
617
|
+
costPerEmployee = 25;
|
|
618
|
+
savingsMultiplier = 50;
|
|
619
|
+
industryLabel = 'professional services';
|
|
620
|
+
}
|
|
621
|
+
break;
|
|
622
|
+
}
|
|
553
623
|
}
|
|
554
624
|
// Use employees for the per-employee fallback model.
|
|
555
625
|
// Domain-specific models (packaging, fleet, water, energy, etc.) handle their own unit economics.
|