@lssm/bundle.lifecycle-managed 0.1.0
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 +36 -0
- package/dist/agents/lifecycle-advisor-agent.d.ts +7 -0
- package/dist/agents/lifecycle-advisor-agent.d.ts.map +1 -0
- package/dist/agents/lifecycle-advisor-agent.js +6 -0
- package/dist/agents/lifecycle-advisor-agent.js.map +1 -0
- package/dist/api/rest-handlers.d.ts +21 -0
- package/dist/api/rest-handlers.d.ts.map +1 -0
- package/dist/api/rest-handlers.js +2 -0
- package/dist/api/rest-handlers.js.map +1 -0
- package/dist/events/lifecycle-events.d.ts +16 -0
- package/dist/events/lifecycle-events.d.ts.map +1 -0
- package/dist/events/lifecycle-events.js +2 -0
- package/dist/events/lifecycle-events.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -0
- package/dist/libs/ai-agent/dist/approval/index.js +1 -0
- package/dist/libs/ai-agent/dist/approval/workflow.js +1 -0
- package/dist/libs/ai-agent/dist/index.js +1 -0
- package/dist/libs/ai-agent/dist/memory/in-memory.js +1 -0
- package/dist/libs/ai-agent/dist/memory/index.js +1 -0
- package/dist/libs/ai-agent/dist/memory/manager.js +1 -0
- package/dist/libs/ai-agent/dist/runner.js +1 -0
- package/dist/libs/ai-agent/dist/spec.js +2 -0
- package/dist/libs/ai-agent/dist/spec.js.map +1 -0
- package/dist/libs/ai-agent/dist/tools/executor.js +1 -0
- package/dist/libs/ai-agent/dist/tools/index.js +1 -0
- package/dist/libs/analytics/dist/churn/index.js +1 -0
- package/dist/libs/analytics/dist/churn/predictor.js +1 -0
- package/dist/libs/analytics/dist/cohort/index.js +1 -0
- package/dist/libs/analytics/dist/cohort/tracker.js +1 -0
- package/dist/libs/analytics/dist/index.js +1 -0
- package/dist/libs/analytics/dist/lifecycle/metric-collectors.js +2 -0
- package/dist/libs/analytics/dist/lifecycle/metric-collectors.js.map +1 -0
- package/dist/libs/lifecycle/dist/index.js +1 -0
- package/dist/libs/lifecycle/dist/types/axes.js +2 -0
- package/dist/libs/lifecycle/dist/types/axes.js.map +1 -0
- package/dist/libs/lifecycle/dist/types/milestones.js +1 -0
- package/dist/libs/lifecycle/dist/types/signals.js +1 -0
- package/dist/libs/lifecycle/dist/types/stages.js +2 -0
- package/dist/libs/lifecycle/dist/types/stages.js.map +1 -0
- package/dist/libs/lifecycle/dist/utils/formatters.js +1 -0
- package/dist/libs/observability/dist/index.js +1 -0
- package/dist/libs/observability/dist/intent/detector.js +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/index.js +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/axes.js +2 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/axes.js.map +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/milestones.js +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/signals.js +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/stages.js +2 -0
- package/dist/libs/observability/dist/lifecycle/dist/types/stages.js.map +1 -0
- package/dist/libs/observability/dist/lifecycle/dist/utils/formatters.js +2 -0
- package/dist/libs/observability/dist/lifecycle/dist/utils/formatters.js.map +1 -0
- package/dist/libs/observability/dist/logging/index.js +2 -0
- package/dist/libs/observability/dist/logging/index.js.map +1 -0
- package/dist/libs/observability/dist/metrics/index.js +2 -0
- package/dist/libs/observability/dist/metrics/index.js.map +1 -0
- package/dist/libs/observability/dist/pipeline/evolution-pipeline.js +1 -0
- package/dist/libs/observability/dist/pipeline/lifecycle-pipeline.js +2 -0
- package/dist/libs/observability/dist/pipeline/lifecycle-pipeline.js.map +1 -0
- package/dist/libs/observability/dist/tracing/index.js +1 -0
- package/dist/libs/observability/dist/tracing/middleware.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/ceremony/ceremony-designer.js +2 -0
- package/dist/modules/lifecycle-advisor/dist/ceremony/ceremony-designer.js.map +1 -0
- package/dist/modules/lifecycle-advisor/dist/index.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/index.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/axes.js +2 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/axes.js.map +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/milestones.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/signals.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/stages.js +2 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/stages.js.map +1 -0
- package/dist/modules/lifecycle-advisor/dist/libs/lifecycle/dist/utils/formatters.js +1 -0
- package/dist/modules/lifecycle-advisor/dist/recommendations/library-recommender.js +2 -0
- package/dist/modules/lifecycle-advisor/dist/recommendations/library-recommender.js.map +1 -0
- package/dist/modules/lifecycle-advisor/dist/recommendations/recommendation-engine.js +2 -0
- package/dist/modules/lifecycle-advisor/dist/recommendations/recommendation-engine.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/collectors/signal-collector.js +2 -0
- package/dist/modules/lifecycle-core/dist/collectors/signal-collector.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/data/milestones-catalog.js +2 -0
- package/dist/modules/lifecycle-core/dist/data/milestones-catalog.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/data/stage-weights.js +2 -0
- package/dist/modules/lifecycle-core/dist/data/stage-weights.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/index.js +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/index.js +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/axes.js +2 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/axes.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/milestones.js +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/signals.js +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/stages.js +2 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/types/stages.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/libs/lifecycle/dist/utils/formatters.js +1 -0
- package/dist/modules/lifecycle-core/dist/orchestrator/lifecycle-orchestrator.js +2 -0
- package/dist/modules/lifecycle-core/dist/orchestrator/lifecycle-orchestrator.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/planning/milestone-planner.js +2 -0
- package/dist/modules/lifecycle-core/dist/planning/milestone-planner.js.map +1 -0
- package/dist/modules/lifecycle-core/dist/scoring/stage-scorer.js +2 -0
- package/dist/modules/lifecycle-core/dist/scoring/stage-scorer.js.map +1 -0
- package/dist/services/assessment-service.d.ts +49 -0
- package/dist/services/assessment-service.d.ts.map +1 -0
- package/dist/services/assessment-service.js +2 -0
- package/dist/services/assessment-service.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @lssm/bundle.lifecycle-managed
|
|
2
|
+
|
|
3
|
+
Lifecycle assessment + guidance managed service for ContractSpec Studio. This bundle wires the lifecycle modules, analytics bridges, and AI advisor agent into a deployable service surface (REST, events, Studio integrations).
|
|
4
|
+
|
|
5
|
+
## Modules
|
|
6
|
+
|
|
7
|
+
- `LifecycleAssessmentService` – orchestrates detection, scoring, guidance, metrics, and managed events.
|
|
8
|
+
- `LifecycleAdvisorAgent` – AI spec definition for conversational lifecycle coaching.
|
|
9
|
+
- `LifecycleEventBridge` – helper to broadcast stage changes + assessment telemetry.
|
|
10
|
+
- REST handlers – HTTP-friendly adapters for serving assessments + playbooks.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { LifecycleAssessmentService, createLifecycleHandlers } from '@lssm/bundle.lifecycle-managed';
|
|
16
|
+
|
|
17
|
+
const service = new LifecycleAssessmentService({
|
|
18
|
+
tenantId: 'tenant_123',
|
|
19
|
+
collectorOptions: {
|
|
20
|
+
analyticsAdapter,
|
|
21
|
+
questionnaireAdapter,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const handlers = createLifecycleHandlers(service);
|
|
26
|
+
|
|
27
|
+
app.post('/lifecycle/assessments', handlers.runAssessment);
|
|
28
|
+
app.get('/lifecycle/playbooks/:stage', handlers.getPlaybook);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The bundle stays framework-agnostic: you can mount the handlers on Elysia, Express, Next.js routes, or background jobs.*** End Patch
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as _lssm_lib_ai_agent0 from "@lssm/lib.ai-agent";
|
|
2
|
+
|
|
3
|
+
//#region src/agents/lifecycle-advisor-agent.d.ts
|
|
4
|
+
declare const LifecycleAdvisorAgent: _lssm_lib_ai_agent0.AgentSpec;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { LifecycleAdvisorAgent };
|
|
7
|
+
//# sourceMappingURL=lifecycle-advisor-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-advisor-agent.d.ts","names":[],"sources":["../../src/agents/lifecycle-advisor-agent.ts"],"sourcesContent":[],"mappings":";;;cAEa,uBAgEX,mBAAA,CAhEgC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{t as e}from"../libs/ai-agent/dist/spec.js";import"../libs/ai-agent/dist/index.js";const t=e({meta:{name:`lifecycle.advisor`,version:1,title:`Lifecycle Advisor Agent`,description:`Guides artisans through lifecycle detection, focus areas, and ceremonies.`,owners:[`team-lifecycle`],domain:`operations`,tags:[`guide`,`lifecycle`,`ops`],stability:`experimental`},description:`Guides users through lifecycle assessments, highlights gaps, and recommends actions tied to ContractSpec libraries.`,instructions:`You are the Lifecycle Advisor. Always clarify the user's current stage, confidence, and blockers before suggesting actions.
|
|
2
|
+
- Prioritize simple, mobile-friendly instructions.
|
|
3
|
+
- When in early stages, focus on learning loops, not heavy infra.
|
|
4
|
+
- When in later stages, emphasize repeatability, telemetry, and managed ceremonies.
|
|
5
|
+
- Suggest at most 3 actions at a time. Reference ContractSpec libraries or modules when relevant.`,tools:[{name:`run_assessment`,description:`Trigger a lifecycle assessment for a tenant.`,schema:{type:`object`,properties:{tenantId:{type:`string`},questionnaire:{type:`object`,additionalProperties:!0}},required:[`tenantId`]},automationSafe:!0},{name:`fetch_playbook`,description:`Retrieve stage-specific playbook (actions, ceremonies, libraries).`,schema:{type:`object`,properties:{stage:{type:`integer`,minimum:0,maximum:6,description:`Lifecycle stage number (0-6)`}},required:[`stage`]},automationSafe:!0}],memory:{maxEntries:25,ttlMinutes:120},policy:{confidence:{min:.7},escalation:{confidenceThreshold:.5,approvalWorkflow:`ops.lifecycle.escalation`},flags:[`lifecycle_advisor`]}});export{t as LifecycleAdvisorAgent};
|
|
6
|
+
//# sourceMappingURL=lifecycle-advisor-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-advisor-agent.js","names":["defineAgent"],"sources":["../../src/agents/lifecycle-advisor-agent.ts"],"sourcesContent":["import { defineAgent } from '@lssm/lib.ai-agent';\n\nexport const LifecycleAdvisorAgent = defineAgent({\n meta: {\n name: 'lifecycle.advisor',\n version: 1,\n title: 'Lifecycle Advisor Agent',\n description:\n 'Guides artisans through lifecycle detection, focus areas, and ceremonies.',\n owners: ['team-lifecycle'],\n domain: 'operations',\n tags: ['guide', 'lifecycle', 'ops'],\n stability: 'experimental',\n },\n description:\n 'Guides users through lifecycle assessments, highlights gaps, and recommends actions tied to ContractSpec libraries.',\n instructions: `You are the Lifecycle Advisor. Always clarify the user's current stage, confidence, and blockers before suggesting actions.\n- Prioritize simple, mobile-friendly instructions.\n- When in early stages, focus on learning loops, not heavy infra.\n- When in later stages, emphasize repeatability, telemetry, and managed ceremonies.\n- Suggest at most 3 actions at a time. Reference ContractSpec libraries or modules when relevant.`,\n tools: [\n {\n name: 'run_assessment',\n description: 'Trigger a lifecycle assessment for a tenant.',\n schema: {\n type: 'object',\n properties: {\n tenantId: { type: 'string' },\n questionnaire: { type: 'object', additionalProperties: true },\n },\n required: ['tenantId'],\n },\n automationSafe: true,\n },\n {\n name: 'fetch_playbook',\n description:\n 'Retrieve stage-specific playbook (actions, ceremonies, libraries).',\n schema: {\n type: 'object',\n properties: {\n stage: {\n type: 'integer',\n minimum: 0,\n maximum: 6,\n description: 'Lifecycle stage number (0-6)',\n },\n },\n required: ['stage'],\n },\n automationSafe: true,\n },\n ],\n memory: {\n maxEntries: 25,\n ttlMinutes: 120,\n },\n policy: {\n confidence: { min: 0.7 },\n escalation: {\n confidenceThreshold: 0.5,\n approvalWorkflow: 'ops.lifecycle.escalation',\n },\n flags: ['lifecycle_advisor'],\n },\n});\n"],"mappings":"yFAEA,MAAa,EAAwBA,EAAY,CAC/C,KAAM,CACJ,KAAM,oBACN,QAAS,EACT,MAAO,0BACP,YACE,4EACF,OAAQ,CAAC,iBAAiB,CAC1B,OAAQ,aACR,KAAM,CAAC,QAAS,YAAa,MAAM,CACnC,UAAW,eACZ,CACD,YACE,sHACF,aAAc;;;;mGAKd,MAAO,CACL,CACE,KAAM,iBACN,YAAa,+CACb,OAAQ,CACN,KAAM,SACN,WAAY,CACV,SAAU,CAAE,KAAM,SAAU,CAC5B,cAAe,CAAE,KAAM,SAAU,qBAAsB,GAAM,CAC9D,CACD,SAAU,CAAC,WAAW,CACvB,CACD,eAAgB,GACjB,CACD,CACE,KAAM,iBACN,YACE,qEACF,OAAQ,CACN,KAAM,SACN,WAAY,CACV,MAAO,CACL,KAAM,UACN,QAAS,EACT,QAAS,EACT,YAAa,+BACd,CACF,CACD,SAAU,CAAC,QAAQ,CACpB,CACD,eAAgB,GACjB,CACF,CACD,OAAQ,CACN,WAAY,GACZ,WAAY,IACb,CACD,OAAQ,CACN,WAAY,CAAE,IAAK,GAAK,CACxB,WAAY,CACV,oBAAqB,GACrB,iBAAkB,2BACnB,CACD,MAAO,CAAC,oBAAoB,CAC7B,CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LifecycleAssessmentRequest, LifecycleAssessmentService } from "../services/assessment-service.js";
|
|
2
|
+
|
|
3
|
+
//#region src/api/rest-handlers.d.ts
|
|
4
|
+
interface HttpRequest<TBody = unknown, TParams = Record<string, string>> {
|
|
5
|
+
body?: TBody;
|
|
6
|
+
params?: TParams;
|
|
7
|
+
query?: Record<string, string | undefined>;
|
|
8
|
+
}
|
|
9
|
+
interface HttpResponse<T = unknown> {
|
|
10
|
+
status: number;
|
|
11
|
+
body: T;
|
|
12
|
+
}
|
|
13
|
+
declare const createLifecycleHandlers: (service: LifecycleAssessmentService) => {
|
|
14
|
+
runAssessment: (req: HttpRequest<LifecycleAssessmentRequest>) => Promise<HttpResponse>;
|
|
15
|
+
getPlaybook: (req: HttpRequest<unknown, {
|
|
16
|
+
stage: string;
|
|
17
|
+
}>) => Promise<HttpResponse>;
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { HttpRequest, HttpResponse, createLifecycleHandlers };
|
|
21
|
+
//# sourceMappingURL=rest-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-handlers.d.ts","names":[],"sources":["../../src/api/rest-handlers.ts"],"sourcesContent":[],"mappings":";;;UAIiB,uCAEL;EAFK,IAAA,CAAA,EAIR,KAJQ;EAEL,MAAA,CAAA,EAGD,OAHC;EAEH,KAAA,CAAA,EAEC,MAFD,CAAA,MAAA,EAAA,MAAA,GAAA,SAAA,CAAA;;AAEC,UAGO,YAHP,CAAA,IAAA,OAAA,CAAA,CAAA;EAAM,MAAA,EAAA,MAAA;EAGC,IAAA,EAET,CAFS;AAKjB;AACW,cADE,uBACF,EAAA,CAAA,OAAA,EAAA,0BAAA,EAAA,GAAA;EAGU,aAAA,EAAA,CAAA,GAAA,EAAZ,WAAY,CAAA,0BAAA,CAAA,EAAA,GAChB,OADgB,CACR,YADQ,CAAA;EAAZ,WAAA,EAAA,CAAA,GAAA,EAOA,WAPA,CAAA,OAAA,EAAA;IACI,KAAA,EAAA,MAAA;EAAR,CAAA,CAAA,EAAA,GAOA,OAPA,CAOQ,YAPR,CAAA;CAMI"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../services/assessment-service.js";const e=e=>({runAssessment:async t=>{let n=t.body??{};return{status:200,body:await e.runAssessment(n)}},getPlaybook:async t=>{let n=Number(t.params?.stage??0);return{status:200,body:e.getStagePlaybook(n)}}});export{e as createLifecycleHandlers};
|
|
2
|
+
//# sourceMappingURL=rest-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-handlers.js","names":[],"sources":["../../src/api/rest-handlers.ts"],"sourcesContent":["import type { LifecycleStage } from '@lssm/lib.lifecycle';\nimport type { LifecycleAssessmentRequest } from '../services/assessment-service';\nimport { LifecycleAssessmentService } from '../services/assessment-service';\n\nexport interface HttpRequest<\n TBody = unknown,\n TParams = Record<string, string>,\n> {\n body?: TBody;\n params?: TParams;\n query?: Record<string, string | undefined>;\n}\n\nexport interface HttpResponse<T = unknown> {\n status: number;\n body: T;\n}\n\nexport const createLifecycleHandlers = (\n service: LifecycleAssessmentService\n) => ({\n runAssessment: async (\n req: HttpRequest<LifecycleAssessmentRequest>\n ): Promise<HttpResponse> => {\n const payload = req.body ?? {};\n const result = await service.runAssessment(payload);\n return { status: 200, body: result };\n },\n getPlaybook: async (\n req: HttpRequest<unknown, { stage: string }>\n ): Promise<HttpResponse> => {\n const stage = Number(req.params?.stage ?? 0) as LifecycleStage;\n const result = service.getStagePlaybook(stage);\n return { status: 200, body: result };\n },\n});\n"],"mappings":"0CAkBA,MAAa,EACX,IACI,CACJ,cAAe,KACb,IAC0B,CAC1B,IAAM,EAAU,EAAI,MAAQ,EAAE,CAE9B,MAAO,CAAE,OAAQ,IAAK,KADP,MAAM,EAAQ,cAAc,EAAQ,CACf,EAEtC,YAAa,KACX,IAC0B,CAC1B,IAAM,EAAQ,OAAO,EAAI,QAAQ,OAAS,EAAE,CAE5C,MAAO,CAAE,OAAQ,IAAK,KADP,EAAQ,iBAAiB,EAAM,CACV,EAEvC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LifecyclePipelineEvent } from "@lssm/lib.observability";
|
|
2
|
+
|
|
3
|
+
//#region src/events/lifecycle-events.d.ts
|
|
4
|
+
interface ManagedLifecycleEvent {
|
|
5
|
+
name: string;
|
|
6
|
+
properties: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
type LifecycleEventPublisher = (event: ManagedLifecycleEvent) => Promise<void> | void;
|
|
9
|
+
declare class LifecycleEventBridge {
|
|
10
|
+
private readonly publisher?;
|
|
11
|
+
constructor(publisher?: LifecycleEventPublisher | undefined);
|
|
12
|
+
forward(event: LifecyclePipelineEvent): void;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { LifecycleEventBridge, LifecycleEventPublisher, ManagedLifecycleEvent };
|
|
16
|
+
//# sourceMappingURL=lifecycle-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-events.d.ts","names":[],"sources":["../../src/events/lifecycle-events.ts"],"sourcesContent":[],"mappings":";;;UAGiB,qBAAA;;EAAA,UAAA,EAEH,MAFG,CAAA,MAAqB,EAAA,OAAA,CAExB;AAGd;AAIa,KAJD,uBAAA,GAK+B,CAAA,KAAA,EAJlC,qBAMQ,EAAA,GALZ,OAKY,CAAA,IAAA,CAAA,GAAsB,IAAA;cAH1B,oBAAA;;0BAC8B;iBAE1B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"../libs/analytics/dist/lifecycle/metric-collectors.js";import"../libs/analytics/dist/index.js";var t=class{constructor(e){this.publisher=e}forward(t){if(this.publisher)switch(t.type){case`assessment.recorded`:this.publisher({name:e.assessmentRun,properties:{tenantId:t.payload.tenantId,stage:t.payload.stage}});break;case`stage.changed`:this.publisher({name:e.stageChanged,properties:{tenantId:t.payload.tenantId,previousStage:t.payload.previousStage,nextStage:t.payload.nextStage}});break;case`confidence.low`:this.publisher({name:`${e.assessmentRun}.low_confidence`,properties:{tenantId:t.payload.tenantId,confidence:t.payload.confidence}});break}}};export{t as LifecycleEventBridge};
|
|
2
|
+
//# sourceMappingURL=lifecycle-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-events.js","names":["publisher?: LifecycleEventPublisher","lifecycleEventNames"],"sources":["../../src/events/lifecycle-events.ts"],"sourcesContent":["import type { LifecyclePipelineEvent } from '@lssm/lib.observability';\nimport { lifecycleEventNames } from '@lssm/lib.analytics';\n\nexport interface ManagedLifecycleEvent {\n name: string;\n properties: Record<string, unknown>;\n}\n\nexport type LifecycleEventPublisher = (\n event: ManagedLifecycleEvent\n) => Promise<void> | void;\n\nexport class LifecycleEventBridge {\n constructor(private readonly publisher?: LifecycleEventPublisher) {}\n\n forward(event: LifecyclePipelineEvent) {\n if (!this.publisher) return;\n switch (event.type) {\n case 'assessment.recorded':\n this.publisher({\n name: lifecycleEventNames.assessmentRun,\n properties: {\n tenantId: event.payload.tenantId,\n stage: event.payload.stage,\n },\n });\n break;\n case 'stage.changed':\n this.publisher({\n name: lifecycleEventNames.stageChanged,\n properties: {\n tenantId: event.payload.tenantId,\n previousStage: event.payload.previousStage,\n nextStage: event.payload.nextStage,\n },\n });\n break;\n case 'confidence.low':\n this.publisher({\n name: `${lifecycleEventNames.assessmentRun}.low_confidence`,\n properties: {\n tenantId: event.payload.tenantId,\n confidence: event.payload.confidence,\n },\n });\n break;\n }\n }\n}\n"],"mappings":"kHAYA,IAAa,EAAb,KAAkC,CAChC,YAAY,EAAsD,CAArC,KAAA,UAAA,EAE7B,QAAQ,EAA+B,CAChC,QAAK,UACV,OAAQ,EAAM,KAAd,CACE,IAAK,sBACH,KAAK,UAAU,CACb,KAAMC,EAAoB,cAC1B,WAAY,CACV,SAAU,EAAM,QAAQ,SACxB,MAAO,EAAM,QAAQ,MACtB,CACF,CAAC,CACF,MACF,IAAK,gBACH,KAAK,UAAU,CACb,KAAMA,EAAoB,aAC1B,WAAY,CACV,SAAU,EAAM,QAAQ,SACxB,cAAe,EAAM,QAAQ,cAC7B,UAAW,EAAM,QAAQ,UAC1B,CACF,CAAC,CACF,MACF,IAAK,iBACH,KAAK,UAAU,CACb,KAAM,GAAGA,EAAoB,cAAc,iBAC3C,WAAY,CACV,SAAU,EAAM,QAAQ,SACxB,WAAY,EAAM,QAAQ,WAC3B,CACF,CAAC,CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LifecycleEventBridge, LifecycleEventPublisher, ManagedLifecycleEvent } from "./events/lifecycle-events.js";
|
|
2
|
+
import { LifecycleAssessmentRequest, LifecycleAssessmentResponse, LifecycleAssessmentService, LifecycleAssessmentServiceOptions } from "./services/assessment-service.js";
|
|
3
|
+
import { LifecycleAdvisorAgent } from "./agents/lifecycle-advisor-agent.js";
|
|
4
|
+
import { HttpRequest, HttpResponse, createLifecycleHandlers } from "./api/rest-handlers.js";
|
|
5
|
+
export { HttpRequest, HttpResponse, LifecycleAdvisorAgent, LifecycleAssessmentRequest, LifecycleAssessmentResponse, LifecycleAssessmentService, LifecycleAssessmentServiceOptions, LifecycleEventBridge, LifecycleEventPublisher, ManagedLifecycleEvent, createLifecycleHandlers };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LifecycleEventBridge as e}from"./events/lifecycle-events.js";import{LifecycleAssessmentService as t}from"./services/assessment-service.js";import{LifecycleAdvisorAgent as n}from"./agents/lifecycle-advisor-agent.js";import{createLifecycleHandlers as r}from"./api/rest-handlers.js";export{n as LifecycleAdvisorAgent,t as LifecycleAssessmentService,e as LifecycleEventBridge,r as createLifecycleHandlers};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./workflow.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:crypto";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./spec.js";import"./tools/executor.js";import"./memory/manager.js";import"./runner.js";import"./memory/in-memory.js";import"./memory/index.js";import"./tools/index.js";import"./approval/workflow.js";import"./approval/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./manager.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./manager.js";import"./in-memory.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:crypto";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./tools/executor.js";import"./memory/manager.js";import"node:crypto";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){if(!e.meta?.name)throw Error(`Agent name is required`);if(!Number.isFinite(e.meta.version))throw Error(`Agent ${e.meta.name} is missing a numeric version`);if(!e.instructions?.trim())throw Error(`Agent ${e.meta.name} requires instructions`);if(!e.tools?.length)throw Error(`Agent ${e.meta.name} must expose at least one tool`);return Object.freeze(e)}export{e as t};
|
|
2
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","names":[],"sources":["../../../../../../libs/ai-agent/dist/spec.js"],"sourcesContent":["const e=e=>`${e.name}.v${e.version}`;function t(e){if(!e.meta?.name)throw Error(`Agent name is required`);if(!Number.isFinite(e.meta.version))throw Error(`Agent ${e.meta.name} is missing a numeric version`);if(!e.instructions?.trim())throw Error(`Agent ${e.meta.name} requires instructions`);if(!e.tools?.length)throw Error(`Agent ${e.meta.name} must expose at least one tool`);return Object.freeze(e)}var n=class{specs=new Map;register(t){let n=e(t.meta);if(this.specs.has(n))throw Error(`Duplicate agent spec registered for ${n}`);return this.specs.set(n,t),this}list(){return[...this.specs.values()]}get(e,t){if(t!=null)return this.specs.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.specs.values())t.meta.name===e&&t.meta.version>r&&(n=t,r=t.meta.version);return n}require(e,t){let n=this.get(e,t);if(!n)throw Error(`Agent spec not found for ${e}${t?`.v${t}`:``}`);return n}};export{n as AgentRegistry,t as defineAgent};\n//# sourceMappingURL=spec.js.map"],"mappings":"AAAqC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,MAAM,yBAAyB,CAAC,GAAG,CAAC,OAAO,SAAS,EAAE,KAAK,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK,KAAK,+BAA+B,CAAC,GAAG,CAAC,EAAE,cAAc,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK,KAAK,wBAAwB,CAAC,GAAG,CAAC,EAAE,OAAO,OAAO,MAAM,MAAM,SAAS,EAAE,KAAK,KAAK,gCAAgC,CAAC,OAAO,OAAO,OAAO,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:timers/promises";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./executor.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./predictor.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"dayjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./tracker.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"dayjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./cohort/tracker.js";import"./cohort/index.js";import"./churn/predictor.js";import"./churn/index.js";import{n as e}from"./lifecycle/metric-collectors.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-collectors.js","names":["t","n","r","e"],"sources":["../../../../../../../libs/analytics/dist/lifecycle/metric-collectors.js"],"sourcesContent":["const e=async e=>{let[t,n,r,i,a,o,s]=await Promise.all([e.getActiveUsers(),e.getWeeklyActiveUsers?.(),e.getRetentionRate?.(),e.getMonthlyRecurringRevenue?.(),e.getCustomerCount?.(),e.getTeamSize?.(),e.getBurnMultiple?.()]);return{activeUsers:t,weeklyActiveUsers:n,retentionRate:r,monthlyRecurringRevenue:i,customerCount:a,teamSize:o,burnMultiple:s}},t=(e,t)=>Object.entries(e).filter(([,e])=>e!=null).map(([e,n])=>({id:`lifecycle-metric:${e}`,kind:`metric`,source:`analytics`,name:e,value:n,weight:1,confidence:.8,details:t?{tenantId:t}:void 0,capturedAt:new Date().toISOString()})),n={assessmentRun:`lifecycle_assessment_run`,stageChanged:`lifecycle_stage_changed`,guidanceConsumed:`lifecycle_guidance_consumed`},r=e=>({name:n.stageChanged,userId:`system`,tenantId:e.tenantId,timestamp:new Date,properties:{...e}});export{e as collectLifecycleMetrics,r as createStageChangeEvent,n as lifecycleEventNames,t as metricsToSignals};\n//# sourceMappingURL=metric-collectors.js.map"],"mappings":"AAAA,MAAukB,EAAE,CAAC,cAAc,2BAA2B,aAAa,0BAA0B,iBAAiB,8BAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e,n as t}from"./types/stages.js";import{e as n,n as r,t as i}from"./types/axes.js";import"./types/signals.js";import"./types/milestones.js";import"./utils/formatters.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e}({}),t=function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),n=function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});export{e,n,t};
|
|
2
|
+
//# sourceMappingURL=axes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axes.js","names":["e"],"sources":["../../../../../../../libs/lifecycle/dist/types/axes.js"],"sourcesContent":["let e=function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e}({}),t=function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),n=function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});export{n as CapitalPhase,t as CompanyPhase,e as ProductPhase};\n//# sourceMappingURL=axes.js.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,OAAO,SAAS,EAAE,UAAU,YAAY,EAAE,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,UAAU,YAAYA,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,KAAK,OAAO,EAAE,SAAS,WAAW,EAAE,cAAc,gBAAgB,EAAE,UAAU,YAAY,EAAE,aAAa,eAAeA,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,aAAa,eAAe,EAAE,QAAQ,UAAU,EAAE,KAAK,OAAO,EAAE,WAAW,aAAa,EAAE,UAAU,YAAYA,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{e,t as n};
|
|
2
|
+
//# sourceMappingURL=stages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.js","names":["e","t"],"sources":["../../../../../../../libs/lifecycle/dist/types/stages.js"],"sourcesContent":["let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});const t=[e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal],n={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}},r=e=>{let t=Object.values(n).find(t=>t.slug===e);if(!t)throw Error(`Unknown lifecycle stage slug: ${e}`);return t.id};export{n as LIFECYCLE_STAGE_META,t as LIFECYCLE_STAGE_ORDER,e as LifecycleStage,r as getLifecycleStageBySlug};\n//# sourceMappingURL=stages.js.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,EAAE,YAAY,GAAG,cAAc,EAAE,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,cAAc,GAAG,gBAAgB,EAAE,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,EAAE,gBAAgB,GAAG,kBAAkBA,GAAG,EAAE,CAAC,CAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAxH,MAAyI,EAAE,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,YAAY,MAAM,EAAE,KAAK,cAAc,KAAK,yBAAyB,SAAS,oCAAoC,QAAQ,CAAC,2BAA2B,0BAA0B,YAAY,CAAC,MAAM,CAAC,4BAA4B,8BAA8B,CAAC,WAAW,CAAC,qBAAqB,qBAAqB,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,KAAK,uBAAuB,KAAK,uBAAuB,SAAS,6CAA6C,QAAQ,CAAC,kBAAkB,kBAAkB,mBAAmB,CAAC,MAAM,CAAC,iCAAiC,6BAA6B,CAAC,WAAW,CAAC,sBAAsB,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,wCAAwC,QAAQ,CAAC,2BAA2B,kBAAkB,iBAAiB,CAAC,MAAM,CAAC,+BAA+B,6BAA6B,CAAC,WAAW,CAAC,aAAa,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,qBAAqB,SAAS,8BAA8B,QAAQ,CAAC,4BAA4B,wBAAwB,gBAAgB,CAAC,MAAM,CAAC,kCAAkC,yBAAyB,CAAC,WAAW,CAAC,YAAY,cAAc,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,MAAM,EAAE,KAAK,kBAAkB,KAAK,oBAAoB,SAAS,+BAA+B,QAAQ,CAAC,uBAAuB,oBAAoB,0BAA0B,CAAC,MAAM,CAAC,oCAAoC,+BAA+B,CAAC,WAAW,CAAC,cAAc,eAAe,0BAA0B,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,iCAAiC,QAAQ,CAAC,sBAAsB,qBAAqB,iBAAiB,CAAC,MAAM,CAAC,yCAAyC,CAAC,WAAW,CAAC,eAAe,OAAO,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,KAAK,mBAAmB,KAAK,qBAAqB,SAAS,iCAAiC,QAAQ,CAAC,eAAe,iBAAiB,oBAAoB,CAAC,MAAM,CAAC,kCAAkC,CAAC,WAAW,CAAC,oBAAoB,mBAAmB,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../types/stages.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./tracing/index.js";import{i as e,n as t,r as n,t as r}from"./metrics/index.js";import{n as i}from"./logging/index.js";import"./tracing/middleware.js";import"./intent/detector.js";import"./pipeline/evolution-pipeline.js";import{a}from"./pipeline/lifecycle-pipeline.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:crypto";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./types/stages.js";import"./utils/formatters.js";import"./types/axes.js";import"./types/signals.js";import"./types/milestones.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e})({}),function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});
|
|
2
|
+
//# sourceMappingURL=axes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axes.js","names":[],"sources":["../../../../../../../../../libs/observability/dist/lifecycle/dist/types/axes.mjs"],"sourcesContent":["(function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e})({}),function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});\n//# sourceMappingURL=axes.mjs.map"],"mappings":"CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,OAAO,SAAS,EAAE,UAAU,YAAY,EAAE,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,KAAK,OAAO,EAAE,SAAS,WAAW,EAAE,cAAc,gBAAgB,EAAE,UAAU,YAAY,EAAE,aAAa,eAAe,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,aAAa,eAAe,EAAE,QAAQ,UAAU,EAAE,KAAK,OAAO,EAAE,WAAW,aAAa,EAAE,UAAU,YAAY,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{t as n};
|
|
2
|
+
//# sourceMappingURL=stages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.js","names":["e"],"sources":["../../../../../../../../../libs/observability/dist/lifecycle/dist/types/stages.mjs"],"sourcesContent":["let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});const t=[e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal],n={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{e,n,t};\n//# sourceMappingURL=stages.mjs.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,EAAE,YAAY,GAAG,cAAc,EAAE,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,cAAc,GAAG,gBAAgB,EAAE,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,EAAE,gBAAgB,GAAG,kBAAkBA,GAAG,EAAE,CAAC,CAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAxH,MAAyI,EAAE,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,YAAY,MAAM,EAAE,KAAK,cAAc,KAAK,yBAAyB,SAAS,oCAAoC,QAAQ,CAAC,2BAA2B,0BAA0B,YAAY,CAAC,MAAM,CAAC,4BAA4B,8BAA8B,CAAC,WAAW,CAAC,qBAAqB,qBAAqB,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,KAAK,uBAAuB,KAAK,uBAAuB,SAAS,6CAA6C,QAAQ,CAAC,kBAAkB,kBAAkB,mBAAmB,CAAC,MAAM,CAAC,iCAAiC,6BAA6B,CAAC,WAAW,CAAC,sBAAsB,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,wCAAwC,QAAQ,CAAC,2BAA2B,kBAAkB,iBAAiB,CAAC,MAAM,CAAC,+BAA+B,6BAA6B,CAAC,WAAW,CAAC,aAAa,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,qBAAqB,SAAS,8BAA8B,QAAQ,CAAC,4BAA4B,wBAAwB,gBAAgB,CAAC,MAAM,CAAC,kCAAkC,yBAAyB,CAAC,WAAW,CAAC,YAAY,cAAc,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,MAAM,EAAE,KAAK,kBAAkB,KAAK,oBAAoB,SAAS,+BAA+B,QAAQ,CAAC,uBAAuB,oBAAoB,0BAA0B,CAAC,MAAM,CAAC,oCAAoC,+BAA+B,CAAC,WAAW,CAAC,cAAc,eAAe,0BAA0B,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,iCAAiC,QAAQ,CAAC,sBAAsB,qBAAqB,iBAAiB,CAAC,MAAM,CAAC,yCAAyC,CAAC,WAAW,CAAC,eAAe,OAAO,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,KAAK,mBAAmB,KAAK,qBAAqB,SAAS,iCAAiC,QAAQ,CAAC,eAAe,iBAAiB,oBAAoB,CAAC,MAAM,CAAC,kCAAkC,CAAC,WAAW,CAAC,oBAAoB,mBAAmB,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","names":["n","e","t"],"sources":["../../../../../../../../../libs/observability/dist/lifecycle/dist/utils/formatters.mjs"],"sourcesContent":["import{n as e,t}from\"../types/stages.mjs\";const n=e=>[`Product: ${e.product}`,`Company: ${e.company}`,`Capital: ${e.capital}`],r=t=>e[t].name;export{r as o,n as r};\n//# sourceMappingURL=formatters.mjs.map"],"mappings":"uCAA0C,MAAqF,EAAE,GAAGC,EAAEC,GAAG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{context as e,trace as t}from"@opentelemetry/api";var n=class{constructor(e){this.serviceName=e}log(n,r,i={}){let a=t.getSpan(e.active()),o=a?.spanContext().traceId,s=a?.spanContext().spanId,c={timestamp:new Date().toISOString(),service:this.serviceName,level:n,message:r,traceId:o,spanId:s,...i};console.log(JSON.stringify(c))}debug(e,t){this.log(`debug`,e,t)}info(e,t){this.log(`info`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}};new n(process.env.OTEL_SERVICE_NAME||`unknown-service`);export{n};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["t","e","n","r"],"sources":["../../../../../../../libs/observability/dist/logging/index.mjs"],"sourcesContent":["import{context as e,trace as t}from\"@opentelemetry/api\";var n=class{constructor(e){this.serviceName=e}log(n,r,i={}){let a=t.getSpan(e.active()),o=a?.spanContext().traceId,s=a?.spanContext().spanId,c={timestamp:new Date().toISOString(),service:this.serviceName,level:n,message:r,traceId:o,spanId:s,...i};console.log(JSON.stringify(c))}debug(e,t){this.log(`debug`,e,t)}info(e,t){this.log(`info`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}};const r=new n(process.env.OTEL_SERVICE_NAME||`unknown-service`);export{n as Logger,r as logger};\n//# sourceMappingURL=index.mjs.map"],"mappings":"wDAAwD,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAEA,EAAE,QAAQC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,KAAK,YAAY,MAAMC,EAAE,QAAQC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,IAAI,KAAK,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,QAAQ,EAAE,EAAE,GAAW,IAAI,EAAE,QAAQ,IAAI,mBAAmB,kBAAkB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{metrics as e}from"@opentelemetry/api";function t(t=`@lssm/lib.observability`){return e.getMeter(t)}function n(e,n,r){return t(r).createCounter(e,{description:n})}function r(e,n,r){return t(r).createUpDownCounter(e,{description:n})}function i(e,n,r){return t(r).createHistogram(e,{description:n})}n(`http_requests_total`,`Total HTTP requests`),i(`http_request_duration_seconds`,`HTTP request duration`),n(`operation_errors_total`,`Total operation errors`),i(`workflow_duration_seconds`,`Workflow execution duration`);export{i,n,r,t};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["e","t","r","n"],"sources":["../../../../../../../libs/observability/dist/metrics/index.mjs"],"sourcesContent":["import{metrics as e}from\"@opentelemetry/api\";function t(t=`@lssm/lib.observability`){return e.getMeter(t)}function n(e,n,r){return t(r).createCounter(e,{description:n})}function r(e,n,r){return t(r).createUpDownCounter(e,{description:n})}function i(e,n,r){return t(r).createHistogram(e,{description:n})}const a={httpRequests:n(`http_requests_total`,`Total HTTP requests`),httpDuration:i(`http_request_duration_seconds`,`HTTP request duration`),operationErrors:n(`operation_errors_total`,`Total operation errors`),workflowDuration:i(`workflow_duration_seconds`,`Workflow execution duration`)};export{n as createCounter,i as createHistogram,r as createUpDownCounter,t as getMeter,a as standardMetrics};\n//# sourceMappingURL=index.mjs.map"],"mappings":"6CAA6C,SAAS,EAAE,EAAE,0BAA0B,CAAC,OAAOA,EAAE,SAASC,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,EAAEC,EAAE,CAAC,cAAc,EAAE,CAAC,YAAYC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,EAAED,EAAE,CAAC,oBAAoB,EAAE,CAAC,YAAYC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,EAAED,EAAE,CAAC,gBAAgB,EAAE,CAAC,YAAYC,EAAE,CAAC,CAAuB,EAAE,sBAAsB,sBAAsB,CAAc,EAAE,gCAAgC,wBAAwB,CAAiB,EAAE,yBAAyB,yBAAyB,CAAkB,EAAE,4BAA4B,8BAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../intent/detector.js";import{EventEmitter as e}from"node:events";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,n as t,r as n}from"../metrics/index.js";import{r}from"../lifecycle/dist/utils/formatters.js";import"../lifecycle/dist/index.js";import{EventEmitter as i}from"node:events";var a=class{assessmentCounter;confidenceHistogram;stageUpDownCounter;emitter;lowConfidenceThreshold;currentStageByTenant=new Map;constructor(r={}){let a=r.meterName??`@lssm/lib.lifecycle-kpi`;this.assessmentCounter=t(`lifecycle_assessments_total`,`Total lifecycle assessments`,a),this.confidenceHistogram=e(`lifecycle_assessment_confidence`,`Lifecycle assessment confidence distribution`,a),this.stageUpDownCounter=n(`lifecycle_stage_tenants`,`Current tenants per lifecycle stage`,a),this.emitter=r.emitter??new i,this.lowConfidenceThreshold=r.lowConfidenceThreshold??.4}recordAssessment(e,t){let n={stage:r(e.stage),tenantId:t};this.assessmentCounter.add(1,n),this.confidenceHistogram.record(e.confidence,n),this.ensureStageCounters(e.stage,t),this.emitter.emit(`event`,{type:`assessment.recorded`,payload:{tenantId:t,stage:e.stage}}),e.confidence<this.lowConfidenceThreshold&&this.emitter.emit(`event`,{type:`confidence.low`,payload:{tenantId:t,confidence:e.confidence}})}on(e){this.emitter.on(`event`,e)}ensureStageCounters(e,t){if(!t)return;let n=this.currentStageByTenant.get(t);n!==e&&(n!==void 0&&this.stageUpDownCounter.add(-1,{stage:r(n),tenantId:t}),this.stageUpDownCounter.add(1,{stage:r(e),tenantId:t}),this.currentStageByTenant.set(t,e),this.emitter.emit(`event`,{type:`stage.changed`,payload:{tenantId:t,previousStage:n,nextStage:e}}))}};export{a};
|
|
2
|
+
//# sourceMappingURL=lifecycle-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-pipeline.js","names":["a","r","e","t","n","i"],"sources":["../../../../../../../libs/observability/dist/pipeline/lifecycle-pipeline.mjs"],"sourcesContent":["import{createCounter as e,createHistogram as t,createUpDownCounter as n}from\"../metrics/index.mjs\";import{o as r}from\"../lifecycle/dist/utils/formatters.mjs\";import\"../lifecycle/dist/index.mjs\";import{EventEmitter as i}from\"node:events\";var a=class{assessmentCounter;confidenceHistogram;stageUpDownCounter;emitter;lowConfidenceThreshold;currentStageByTenant=new Map;constructor(r={}){let a=r.meterName??`@lssm/lib.lifecycle-kpi`;this.assessmentCounter=e(`lifecycle_assessments_total`,`Total lifecycle assessments`,a),this.confidenceHistogram=t(`lifecycle_assessment_confidence`,`Lifecycle assessment confidence distribution`,a),this.stageUpDownCounter=n(`lifecycle_stage_tenants`,`Current tenants per lifecycle stage`,a),this.emitter=r.emitter??new i,this.lowConfidenceThreshold=r.lowConfidenceThreshold??.4}recordAssessment(e,t){let n={stage:r(e.stage),tenantId:t};this.assessmentCounter.add(1,n),this.confidenceHistogram.record(e.confidence,n),this.ensureStageCounters(e.stage,t),this.emitter.emit(`event`,{type:`assessment.recorded`,payload:{tenantId:t,stage:e.stage}}),e.confidence<this.lowConfidenceThreshold&&this.emitter.emit(`event`,{type:`confidence.low`,payload:{tenantId:t,confidence:e.confidence}})}on(e){this.emitter.on(`event`,e)}ensureStageCounters(e,t){if(!t)return;let n=this.currentStageByTenant.get(t);n!==e&&(n!==void 0&&this.stageUpDownCounter.add(-1,{stage:r(n),tenantId:t}),this.stageUpDownCounter.add(1,{stage:r(e),tenantId:t}),this.currentStageByTenant.set(t,e),this.emitter.emit(`event`,{type:`stage.changed`,payload:{tenantId:t,previousStage:n,nextStage:e}}))}};export{a as LifecycleKpiPipeline};\n//# sourceMappingURL=lifecycle-pipeline.mjs.map"],"mappings":"yLAA6O,IAAI,EAAE,KAAK,CAAC,kBAAkB,oBAAoB,mBAAmB,QAAQ,uBAAuB,qBAAqB,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC,CAAC,IAAIA,EAAEC,EAAE,WAAW,0BAA0B,KAAK,kBAAkBC,EAAE,8BAA8B,8BAA8BF,EAAE,CAAC,KAAK,oBAAoBG,EAAE,kCAAkC,+CAA+CH,EAAE,CAAC,KAAK,mBAAmBI,EAAE,0BAA0B,sCAAsCJ,EAAE,CAAC,KAAK,QAAQC,EAAE,SAAS,IAAII,EAAE,KAAK,uBAAuBJ,EAAE,wBAAwB,GAAG,iBAAiB,EAAE,EAAE,CAAC,IAAIG,EAAE,CAAC,MAAMH,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,kBAAkB,IAAI,EAAEG,EAAE,CAAC,KAAK,oBAAoB,OAAO,EAAE,WAAWA,EAAE,CAAC,KAAK,oBAAoB,EAAE,MAAM,EAAE,CAAC,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK,sBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,wBAAwB,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK,iBAAiB,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,QAAQ,GAAG,QAAQ,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,IAAIA,EAAE,KAAK,qBAAqB,IAAI,EAAE,CAAC,IAAI,IAAIA,IAAI,IAAK,IAAG,KAAK,mBAAmB,IAAI,GAAG,CAAC,MAAMH,EAAEG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,mBAAmB,IAAI,EAAE,CAAC,MAAMH,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,qBAAqB,IAAI,EAAE,EAAE,CAAC,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK,gBAAgB,QAAQ,CAAC,SAAS,EAAE,cAAcG,EAAE,UAAU,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{context as e,trace as t}from"@opentelemetry/api";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./index.js";import"../metrics/index.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../libs/lifecycle/dist/index.js";const e=new Map((void 0)(e=>[e.stage,e.ceremony]));var t=class{ceremonies;constructor(t){this.ceremonies=t?.length?new Map(t.map(e=>[e.stage,e.ceremony])):e}design(e){return this.ceremonies.get(e)}};export{t};
|
|
2
|
+
//# sourceMappingURL=ceremony-designer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ceremony-designer.js","names":["e","t"],"sources":["../../../../../../../modules/lifecycle-advisor/dist/ceremony/ceremony-designer.js"],"sourcesContent":["import\"../libs/lifecycle/dist/index.js\";const e=new Map((void 0)(e=>[e.stage,e.ceremony]));var t=class{ceremonies;constructor(t){this.ceremonies=t?.length?new Map(t.map(e=>[e.stage,e.ceremony])):e}design(e){return this.ceremonies.get(e)}};export{t as LifecycleCeremonyDesigner};\n//# sourceMappingURL=ceremony-designer.js.map"],"mappings":"wCAAwC,MAAM,EAAE,IAAI,KAAK,IAAK,IAAG,GAAG,CAACA,EAAE,MAAMA,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,KAAK,WAAWC,GAAG,OAAO,IAAI,IAAIA,EAAE,IAAI,GAAG,CAACD,EAAE,MAAMA,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,WAAW,IAAIA,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./recommendations/recommendation-engine.js";import{t}from"./recommendations/library-recommender.js";import{t as n}from"./ceremony/ceremony-designer.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./types/stages.js";import"./types/axes.js";import"./types/signals.js";import"./types/milestones.js";import"./utils/formatters.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e})({}),function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});
|
|
2
|
+
//# sourceMappingURL=axes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axes.js","names":[],"sources":["../../../../../../../../../../modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/axes.js"],"sourcesContent":["(function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e})({}),function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});\n//# sourceMappingURL=axes.js.map"],"mappings":"CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,OAAO,SAAS,EAAE,UAAU,YAAY,EAAE,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,KAAK,OAAO,EAAE,SAAS,WAAW,EAAE,cAAc,gBAAgB,EAAE,UAAU,YAAY,EAAE,aAAa,eAAe,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,MAAO,GAAE,aAAa,eAAe,EAAE,QAAQ,UAAU,EAAE,KAAK,OAAO,EAAE,WAAW,aAAa,EAAE,UAAU,YAAY,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{t};
|
|
2
|
+
//# sourceMappingURL=stages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.js","names":["e"],"sources":["../../../../../../../../../../modules/lifecycle-advisor/dist/libs/lifecycle/dist/types/stages.js"],"sourcesContent":["let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{e,t as n};\n//# sourceMappingURL=stages.js.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,EAAE,YAAY,GAAG,cAAc,EAAE,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,cAAc,GAAG,gBAAgB,EAAE,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,EAAE,gBAAgB,GAAG,kBAAkBA,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,YAAY,MAAM,EAAE,KAAK,cAAc,KAAK,yBAAyB,SAAS,oCAAoC,QAAQ,CAAC,2BAA2B,0BAA0B,YAAY,CAAC,MAAM,CAAC,4BAA4B,8BAA8B,CAAC,WAAW,CAAC,qBAAqB,qBAAqB,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,KAAK,uBAAuB,KAAK,uBAAuB,SAAS,6CAA6C,QAAQ,CAAC,kBAAkB,kBAAkB,mBAAmB,CAAC,MAAM,CAAC,iCAAiC,6BAA6B,CAAC,WAAW,CAAC,sBAAsB,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,wCAAwC,QAAQ,CAAC,2BAA2B,kBAAkB,iBAAiB,CAAC,MAAM,CAAC,+BAA+B,6BAA6B,CAAC,WAAW,CAAC,aAAa,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,qBAAqB,SAAS,8BAA8B,QAAQ,CAAC,4BAA4B,wBAAwB,gBAAgB,CAAC,MAAM,CAAC,kCAAkC,yBAAyB,CAAC,WAAW,CAAC,YAAY,cAAc,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,MAAM,EAAE,KAAK,kBAAkB,KAAK,oBAAoB,SAAS,+BAA+B,QAAQ,CAAC,uBAAuB,oBAAoB,0BAA0B,CAAC,MAAM,CAAC,oCAAoC,+BAA+B,CAAC,WAAW,CAAC,cAAc,eAAe,0BAA0B,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,iCAAiC,QAAQ,CAAC,sBAAsB,qBAAqB,iBAAiB,CAAC,MAAM,CAAC,yCAAyC,CAAC,WAAW,CAAC,eAAe,OAAO,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,KAAK,mBAAmB,KAAK,qBAAqB,SAAS,iCAAiC,QAAQ,CAAC,eAAe,iBAAiB,oBAAoB,CAAC,MAAM,CAAC,kCAAkC,CAAC,WAAW,CAAC,oBAAoB,mBAAmB,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../types/stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../libs/lifecycle/dist/index.js";const e=new Map((void 0)(e=>[e.stage,e.items]));var t=class{mapping;constructor(t){this.mapping=t?.length?new Map(t.map(e=>[e.stage,e.items])):e}recommend(e,t=4){let n=this.mapping.get(e);return n?.length?n.slice(0,t):[]}};export{t};
|
|
2
|
+
//# sourceMappingURL=library-recommender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-recommender.js","names":["e","t"],"sources":["../../../../../../../modules/lifecycle-advisor/dist/recommendations/library-recommender.js"],"sourcesContent":["import\"../libs/lifecycle/dist/index.js\";const e=new Map((void 0)(e=>[e.stage,e.items]));var t=class{mapping;constructor(t){this.mapping=t?.length?new Map(t.map(e=>[e.stage,e.items])):e}recommend(e,t=4){let n=this.mapping.get(e);return n?.length?n.slice(0,t):[]}};export{t as ContractSpecLibraryRecommender};\n//# sourceMappingURL=library-recommender.js.map"],"mappings":"wCAAwC,MAAM,EAAE,IAAI,KAAK,IAAK,IAAG,GAAG,CAACA,EAAE,MAAMA,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,YAAY,EAAE,CAAC,KAAK,QAAQC,GAAG,OAAO,IAAI,IAAIA,EAAE,IAAI,GAAG,CAACD,EAAE,MAAMA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAIA,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,EAAEC,EAAE,CAAC,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"../libs/lifecycle/dist/types/stages.js";import"../libs/lifecycle/dist/index.js";const t=new Map((void 0)(e=>[e.stage,{...e,stage:e.stage}]));var n=class{playbooks;constructor(e){this.playbooks=e?.length?new Map(e.map(e=>[e.stage,e])):t}generate(e,t={}){let n=this.playbooks.get(e.stage)??r(e.stage),a=t.limit??3,o=(n.actions??[]).slice(0,a),s=o.length>0?o:i(e,a);return{assessmentId:e.generatedAt,stage:e.stage,actions:s,upcomingMilestones:t.upcomingMilestones??[],ceremony:n.ceremony}}};const r=t=>({stage:t,actions:[],focusAreas:e[t].focusAreas}),i=(t,n)=>(t.focusAreas??e[t.stage].focusAreas).slice(0,n).map((e,n)=>({id:`fallback-${t.stage}-${n}`,stage:t.stage,title:`Advance ${e}`,description:`Identify one task that will improve "${e}" this week.`,priority:n+1,estimatedImpact:`low`,effortLevel:`s`,category:`product`}));export{n};
|
|
2
|
+
//# sourceMappingURL=recommendation-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommendation-engine.js","names":["t","e","n"],"sources":["../../../../../../../modules/lifecycle-advisor/dist/recommendations/recommendation-engine.js"],"sourcesContent":["import{n as e}from\"../libs/lifecycle/dist/types/stages.js\";import\"../libs/lifecycle/dist/index.js\";const t=new Map((void 0)(e=>[e.stage,{...e,stage:e.stage}]));var n=class{playbooks;constructor(e){this.playbooks=e?.length?new Map(e.map(e=>[e.stage,e])):t}generate(e,t={}){let n=this.playbooks.get(e.stage)??r(e.stage),a=t.limit??3,o=(n.actions??[]).slice(0,a),s=o.length>0?o:i(e,a);return{assessmentId:e.generatedAt,stage:e.stage,actions:s,upcomingMilestones:t.upcomingMilestones??[],ceremony:n.ceremony}}};const r=t=>({stage:t,actions:[],focusAreas:e[t].focusAreas}),i=(t,n)=>(t.focusAreas??e[t.stage].focusAreas).slice(0,n).map((e,n)=>({id:`fallback-${t.stage}-${n}`,stage:t.stage,title:`Advance ${e}`,description:`Identify one task that will improve \"${e}\" this week.`,priority:n+1,estimatedImpact:`low`,effortLevel:`s`,category:`product`}));export{n as LifecycleRecommendationEngine};\n//# sourceMappingURL=recommendation-engine.js.map"],"mappings":"mGAAmG,MAAMA,EAAE,IAAI,KAAK,IAAK,IAAG,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,KAAK,UAAU,GAAG,OAAO,IAAI,IAAI,EAAE,IAAI,GAAG,CAACC,EAAE,MAAMA,EAAE,CAAC,CAAC,CAACD,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,IAAIE,EAAE,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAEF,EAAE,OAAO,EAAE,GAAGE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,MAAM,EAAE,MAAM,QAAQ,EAAE,mBAAmBF,EAAE,oBAAoB,EAAE,CAAC,SAASE,EAAE,SAAS,GAAG,MAAM,EAAE,IAAI,CAAC,MAAMF,EAAE,QAAQ,EAAE,CAAC,WAAWC,EAAED,GAAG,WAAW,EAAE,GAAG,EAAE,KAAKA,EAAE,YAAYC,EAAED,EAAE,OAAO,YAAY,MAAM,EAAEE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAYF,EAAE,MAAM,GAAGE,IAAI,MAAMF,EAAE,MAAM,MAAM,WAAW,IAAI,YAAY,wCAAwC,EAAE,cAAc,SAASE,EAAE,EAAE,gBAAgB,MAAM,YAAY,IAAI,SAAS,UAAU,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e,n as t,t as n}from"../libs/lifecycle/dist/types/axes.js";import"../libs/lifecycle/dist/index.js";const r={product:e.Sketch,company:n.Solo,capital:t.Bootstrapped};var i=class{options;constructor(e){this.options=e}async collect(e={}){let t={...r,...e.axes??{}},n=[],i=[...e.signals??[]],s={...e.questionnaireAnswers??{}};if(e.metrics&&n.push(e.metrics),this.options.analyticsAdapter){let e=await this.options.analyticsAdapter.fetch();e.axes&&Object.assign(t,e.axes),e.metrics&&n.push(e.metrics),e.signals&&i.push(...e.signals)}if(this.options.questionnaireAdapter){let e=await this.options.questionnaireAdapter.fetch();e.axes&&Object.assign(t,e.axes),e.signals&&i.push(...e.signals),Object.assign(s,e.answers)}if(this.options.intentAdapter){let e=await this.options.intentAdapter.fetch();e.signals&&i.push(...e.signals)}return{axes:t,metrics:a(n),signals:o(i),questionnaireAnswers:Object.keys(s).length?s:void 0}}};const a=e=>e.reduce((e,t)=>(Object.entries(t??{}).forEach(([t,n])=>{n!=null&&(e[t]=n)}),e),{}),o=e=>{let t=new Set;return e.filter(e=>e.id?t.has(e.id)?!1:(t.add(e.id),!0):!0)};export{i};
|
|
2
|
+
//# sourceMappingURL=signal-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-collector.js","names":["n","t","e","i"],"sources":["../../../../../../../modules/lifecycle-core/dist/collectors/signal-collector.js"],"sourcesContent":["import{e,n as t,t as n}from\"../libs/lifecycle/dist/types/axes.js\";import\"../libs/lifecycle/dist/index.js\";const r={product:e.Sketch,company:n.Solo,capital:t.Bootstrapped};var i=class{options;constructor(e){this.options=e}async collect(e={}){let t={...r,...e.axes??{}},n=[],i=[...e.signals??[]],s={...e.questionnaireAnswers??{}};if(e.metrics&&n.push(e.metrics),this.options.analyticsAdapter){let e=await this.options.analyticsAdapter.fetch();e.axes&&Object.assign(t,e.axes),e.metrics&&n.push(e.metrics),e.signals&&i.push(...e.signals)}if(this.options.questionnaireAdapter){let e=await this.options.questionnaireAdapter.fetch();e.axes&&Object.assign(t,e.axes),e.signals&&i.push(...e.signals),Object.assign(s,e.answers)}if(this.options.intentAdapter){let e=await this.options.intentAdapter.fetch();e.signals&&i.push(...e.signals)}return{axes:t,metrics:a(n),signals:o(i),questionnaireAnswers:Object.keys(s).length?s:void 0}}};const a=e=>e.reduce((e,t)=>(Object.entries(t??{}).forEach(([t,n])=>{n!=null&&(e[t]=n)}),e),{}),o=e=>{let t=new Set;return e.filter(e=>e.id?t.has(e.id)?!1:(t.add(e.id),!0):!0)};export{i as StageSignalCollector};\n//# sourceMappingURL=signal-collector.js.map"],"mappings":"0GAA0G,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,QAAQA,EAAE,KAAK,QAAQC,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,YAAY,EAAE,CAAC,KAAK,QAAQC,EAAE,MAAM,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAID,EAAE,CAAC,GAAG,EAAE,GAAGC,EAAE,MAAM,EAAE,CAAC,CAACF,EAAE,EAAE,CAACG,EAAE,CAAC,GAAGD,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,GAAGA,EAAE,sBAAsB,EAAE,CAAC,CAAC,GAAGA,EAAE,SAASF,EAAE,KAAKE,EAAE,QAAQ,CAAC,KAAK,QAAQ,iBAAiB,CAAC,IAAIA,EAAE,MAAM,KAAK,QAAQ,iBAAiB,OAAO,CAAC,EAAE,MAAM,OAAO,OAAOD,EAAEC,EAAE,KAAK,CAACA,EAAE,SAASF,EAAE,KAAKE,EAAE,QAAQ,CAACA,EAAE,SAASC,EAAE,KAAK,GAAGD,EAAE,QAAQ,CAAC,GAAG,KAAK,QAAQ,qBAAqB,CAAC,IAAIA,EAAE,MAAM,KAAK,QAAQ,qBAAqB,OAAO,CAAC,EAAE,MAAM,OAAO,OAAOD,EAAEC,EAAE,KAAK,CAACA,EAAE,SAASC,EAAE,KAAK,GAAGD,EAAE,QAAQ,CAAC,OAAO,OAAO,EAAEA,EAAE,QAAQ,CAAC,GAAG,KAAK,QAAQ,cAAc,CAAC,IAAIA,EAAE,MAAM,KAAK,QAAQ,cAAc,OAAO,CAAC,EAAE,SAASC,EAAE,KAAK,GAAGD,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAKD,EAAE,QAAQ,EAAED,EAAE,CAAC,QAAQ,EAAEG,EAAE,CAAC,qBAAqB,OAAO,KAAK,EAAE,CAAC,OAAO,EAAE,IAAK,GAAE,GAAG,MAAM,EAAE,GAAGD,EAAE,QAAQ,EAAE,KAAK,OAAO,QAAQD,GAAG,EAAE,CAAC,CAAC,SAAS,CAACA,EAAED,KAAK,CAAC,GAAG,OAAO,EAAEC,GAAGD,IAAI,CAACE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAID,EAAE,IAAI,IAAI,OAAOC,EAAE,OAAO,GAAGA,EAAE,GAAGD,EAAE,IAAIC,EAAE,GAAG,CAAC,CAAC,GAAGD,EAAE,IAAIC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=[{id:`stage0-problem-statement`,stage:0,category:`product`,title:`Write the pain statement`,description:`Capture the clearest description of the top problem in the customer’s own words.`,priority:1,actionItems:[`Interview at least 5 ideal customers`,`Synthesize quotes into a one-page brief`]},{id:`stage1-prototype-loop`,stage:1,category:`product`,title:`Prototype feedback loop`,description:`Ship a clickable prototype and gather 3 rounds of feedback.`,priority:2,actionItems:[`Create a low-fidelity prototype`,`Schedule standing feedback calls`]},{id:`stage2-activation`,stage:2,category:`operations`,title:`Activation checklist`,description:`Define the minimum steps required for a new user to succeed.`,priority:1,actionItems:[`Document onboarding flow`,`Instrument activation analytics`]},{id:`stage3-retention-narrative`,stage:3,category:`product`,title:`Retention narrative`,description:`Create the before/after story that proves why users stay.`,priority:2,actionItems:[`Interview 3 retained users`,`Publish a one-pager with concrete metrics`]},{id:`stage4-growth-loop`,stage:4,category:`growth`,title:`Install a growth loop`,description:`Stand up a repeatable acquisition → activation → referral motion.`,priority:1,actionItems:[`Define loop metrics`,`Assign owners for each stage`,`Review weekly`]},{id:`stage5-platform-blueprint`,stage:5,category:`product`,title:`Platform blueprint`,description:`Align on APIs, integrations, and governance for partners.`,priority:2,actionItems:[`Create integration scoring rubric`,`Publish partner onboarding checklist`]},{id:`stage6-renewal-ops`,stage:6,category:`operations`,title:`Renewal operating rhythm`,description:`Decide whether to optimize, reinvest, or sunset each major surface.`,priority:1,actionItems:[`Hold quarterly renewal review`,`Document reinvestment bets`]}];export{e};
|
|
2
|
+
//# sourceMappingURL=milestones-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones-catalog.js","names":[],"sources":["../../../../../../../modules/lifecycle-core/dist/data/milestones-catalog.js"],"sourcesContent":["var e=[{id:`stage0-problem-statement`,stage:0,category:`product`,title:`Write the pain statement`,description:`Capture the clearest description of the top problem in the customer’s own words.`,priority:1,actionItems:[`Interview at least 5 ideal customers`,`Synthesize quotes into a one-page brief`]},{id:`stage1-prototype-loop`,stage:1,category:`product`,title:`Prototype feedback loop`,description:`Ship a clickable prototype and gather 3 rounds of feedback.`,priority:2,actionItems:[`Create a low-fidelity prototype`,`Schedule standing feedback calls`]},{id:`stage2-activation`,stage:2,category:`operations`,title:`Activation checklist`,description:`Define the minimum steps required for a new user to succeed.`,priority:1,actionItems:[`Document onboarding flow`,`Instrument activation analytics`]},{id:`stage3-retention-narrative`,stage:3,category:`product`,title:`Retention narrative`,description:`Create the before/after story that proves why users stay.`,priority:2,actionItems:[`Interview 3 retained users`,`Publish a one-pager with concrete metrics`]},{id:`stage4-growth-loop`,stage:4,category:`growth`,title:`Install a growth loop`,description:`Stand up a repeatable acquisition → activation → referral motion.`,priority:1,actionItems:[`Define loop metrics`,`Assign owners for each stage`,`Review weekly`]},{id:`stage5-platform-blueprint`,stage:5,category:`product`,title:`Platform blueprint`,description:`Align on APIs, integrations, and governance for partners.`,priority:2,actionItems:[`Create integration scoring rubric`,`Publish partner onboarding checklist`]},{id:`stage6-renewal-ops`,stage:6,category:`operations`,title:`Renewal operating rhythm`,description:`Decide whether to optimize, reinvest, or sunset each major surface.`,priority:1,actionItems:[`Hold quarterly renewal review`,`Document reinvestment bets`]}];export{e as default};\n//# sourceMappingURL=milestones-catalog.js.map"],"mappings":"AAAA,IAAI,EAAE,CAAC,CAAC,GAAG,2BAA2B,MAAM,EAAE,SAAS,UAAU,MAAM,2BAA2B,YAAY,mFAAmF,SAAS,EAAE,YAAY,CAAC,uCAAuC,0CAA0C,CAAC,CAAC,CAAC,GAAG,wBAAwB,MAAM,EAAE,SAAS,UAAU,MAAM,0BAA0B,YAAY,8DAA8D,SAAS,EAAE,YAAY,CAAC,kCAAkC,mCAAmC,CAAC,CAAC,CAAC,GAAG,oBAAoB,MAAM,EAAE,SAAS,aAAa,MAAM,uBAAuB,YAAY,+DAA+D,SAAS,EAAE,YAAY,CAAC,2BAA2B,kCAAkC,CAAC,CAAC,CAAC,GAAG,6BAA6B,MAAM,EAAE,SAAS,UAAU,MAAM,sBAAsB,YAAY,4DAA4D,SAAS,EAAE,YAAY,CAAC,6BAA6B,4CAA4C,CAAC,CAAC,CAAC,GAAG,qBAAqB,MAAM,EAAE,SAAS,SAAS,MAAM,wBAAwB,YAAY,oEAAoE,SAAS,EAAE,YAAY,CAAC,sBAAsB,+BAA+B,gBAAgB,CAAC,CAAC,CAAC,GAAG,4BAA4B,MAAM,EAAE,SAAS,UAAU,MAAM,qBAAqB,YAAY,4DAA4D,SAAS,EAAE,YAAY,CAAC,oCAAoC,uCAAuC,CAAC,CAAC,CAAC,GAAG,qBAAqB,MAAM,EAAE,SAAS,aAAa,MAAM,2BAA2B,YAAY,sEAAsE,SAAS,EAAE,YAAY,CAAC,gCAAgC,6BAA6B,CAAC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={Exploration:{base:.35,metrics:{activeUsers:{weight:-.3,direction:`lte`,threshold:5},customerCount:{weight:-.2,direction:`lte`,threshold:3},teamSize:{weight:-.1,direction:`lte`,threshold:3}},signalKinds:{qualitative:.4,metric:.1}},ProblemSolutionFit:{base:.4,metrics:{activeUsers:{weight:.2,direction:`gte`,threshold:5},customerCount:{weight:.2,direction:`gte`,threshold:3}},signalKinds:{qualitative:.3,event:.1}},MvpEarlyTraction:{base:.45,metrics:{activeUsers:{weight:.25,direction:`gte`,threshold:25},weeklyActiveUsers:{weight:.25,direction:`gte`,threshold:20},retentionRate:{weight:.2,direction:`gte`,threshold:.25}},signalKinds:{metric:.15,event:.1}},ProductMarketFit:{base:.5,metrics:{retentionRate:{weight:.35,direction:`gte`,threshold:.45},monthlyRecurringRevenue:{weight:.25,direction:`gte`,threshold:1e4},customerCount:{weight:.2,direction:`gte`,threshold:30}},signalKinds:{metric:.15,event:.1}},GrowthScaleUp:{base:.55,metrics:{retentionRate:{weight:.2,direction:`gte`,threshold:.55},monthlyRecurringRevenue:{weight:.3,direction:`gte`,threshold:5e4},teamSize:{weight:.15,direction:`gte`,threshold:15}},signalKinds:{event:.2,metric:.15}},ExpansionPlatform:{base:.6,metrics:{monthlyRecurringRevenue:{weight:.35,direction:`gte`,threshold:15e4},customerCount:{weight:.2,direction:`gte`,threshold:100},teamSize:{weight:.15,direction:`gte`,threshold:40}},signalKinds:{event:.2,milestone:.1}},MaturityRenewal:{base:.6,metrics:{monthlyRecurringRevenue:{weight:.25,direction:`gte`,threshold:25e4},teamSize:{weight:.15,direction:`gte`,threshold:80},burnMultiple:{weight:.2,direction:`lte`,threshold:1.5}},signalKinds:{event:.2,milestone:.15}}};export{e};
|
|
2
|
+
//# sourceMappingURL=stage-weights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-weights.js","names":[],"sources":["../../../../../../../modules/lifecycle-core/dist/data/stage-weights.js"],"sourcesContent":["var e={Exploration:{base:.35,metrics:{activeUsers:{weight:-.3,direction:`lte`,threshold:5},customerCount:{weight:-.2,direction:`lte`,threshold:3},teamSize:{weight:-.1,direction:`lte`,threshold:3}},signalKinds:{qualitative:.4,metric:.1}},ProblemSolutionFit:{base:.4,metrics:{activeUsers:{weight:.2,direction:`gte`,threshold:5},customerCount:{weight:.2,direction:`gte`,threshold:3}},signalKinds:{qualitative:.3,event:.1}},MvpEarlyTraction:{base:.45,metrics:{activeUsers:{weight:.25,direction:`gte`,threshold:25},weeklyActiveUsers:{weight:.25,direction:`gte`,threshold:20},retentionRate:{weight:.2,direction:`gte`,threshold:.25}},signalKinds:{metric:.15,event:.1}},ProductMarketFit:{base:.5,metrics:{retentionRate:{weight:.35,direction:`gte`,threshold:.45},monthlyRecurringRevenue:{weight:.25,direction:`gte`,threshold:1e4},customerCount:{weight:.2,direction:`gte`,threshold:30}},signalKinds:{metric:.15,event:.1}},GrowthScaleUp:{base:.55,metrics:{retentionRate:{weight:.2,direction:`gte`,threshold:.55},monthlyRecurringRevenue:{weight:.3,direction:`gte`,threshold:5e4},teamSize:{weight:.15,direction:`gte`,threshold:15}},signalKinds:{event:.2,metric:.15}},ExpansionPlatform:{base:.6,metrics:{monthlyRecurringRevenue:{weight:.35,direction:`gte`,threshold:15e4},customerCount:{weight:.2,direction:`gte`,threshold:100},teamSize:{weight:.15,direction:`gte`,threshold:40}},signalKinds:{event:.2,milestone:.1}},MaturityRenewal:{base:.6,metrics:{monthlyRecurringRevenue:{weight:.25,direction:`gte`,threshold:25e4},teamSize:{weight:.15,direction:`gte`,threshold:80},burnMultiple:{weight:.2,direction:`lte`,threshold:1.5}},signalKinds:{event:.2,milestone:.15}}};export{e as default};\n//# sourceMappingURL=stage-weights.js.map"],"mappings":"AAAA,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,EAAE,CAAC,cAAc,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,EAAE,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,KAAK,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,GAAG,CAAC,kBAAkB,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,IAAI,CAAC,wBAAwB,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,IAAI,QAAQ,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC,kBAAkB,CAAC,KAAK,GAAG,QAAQ,CAAC,wBAAwB,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,GAAG,QAAQ,CAAC,wBAAwB,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,KAAK,CAAC,SAAS,CAAC,OAAO,IAAI,UAAU,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,UAAU,MAAM,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,UAAU,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./collectors/signal-collector.js";import{i as t}from"./scoring/stage-scorer.js";import{t as n}from"./planning/milestone-planner.js";import{n as r}from"./orchestrator/lifecycle-orchestrator.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./types/axes.js";import"./types/stages.js";import"./types/signals.js";import"./types/milestones.js";import"./utils/formatters.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e}({}),t=function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),n=function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});export{e,n,t};
|
|
2
|
+
//# sourceMappingURL=axes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axes.js","names":["e"],"sources":["../../../../../../../../../../modules/lifecycle-core/dist/libs/lifecycle/dist/types/axes.js"],"sourcesContent":["let e=function(e){return e.Sketch=`Sketch`,e.Prototype=`Prototype`,e.Mvp=`MVP`,e.V1=`V1`,e.Ecosystem=`Ecosystem`,e}({}),t=function(e){return e.Solo=`Solo`,e.TinyTeam=`TinyTeam`,e.FunctionalOrg=`FunctionalOrg`,e.MultiTeam=`MultiTeam`,e.Bureaucratic=`Bureaucratic`,e}({}),n=function(e){return e.Bootstrapped=`Bootstrapped`,e.PreSeed=`PreSeed`,e.Seed=`Seed`,e.SeriesAorB=`SeriesAorB`,e.LateStage=`LateStage`,e}({});export{e,n,t};\n//# sourceMappingURL=axes.js.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,OAAO,SAAS,EAAE,UAAU,YAAY,EAAE,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,UAAU,YAAYA,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,KAAK,OAAO,EAAE,SAAS,WAAW,EAAE,cAAc,gBAAgB,EAAE,UAAU,YAAY,EAAE,aAAa,eAAeA,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,aAAa,eAAe,EAAE,QAAQ,UAAU,EAAE,KAAK,OAAO,EAAE,WAAW,aAAa,EAAE,UAAU,YAAYA,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{e,t};
|
|
2
|
+
//# sourceMappingURL=stages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.js","names":["e"],"sources":["../../../../../../../../../../modules/lifecycle-core/dist/libs/lifecycle/dist/types/stages.js"],"sourcesContent":["let e=function(e){return e[e.Exploration=0]=`Exploration`,e[e.ProblemSolutionFit=1]=`ProblemSolutionFit`,e[e.MvpEarlyTraction=2]=`MvpEarlyTraction`,e[e.ProductMarketFit=3]=`ProductMarketFit`,e[e.GrowthScaleUp=4]=`GrowthScaleUp`,e[e.ExpansionPlatform=5]=`ExpansionPlatform`,e[e.MaturityRenewal=6]=`MaturityRenewal`,e}({});e.Exploration,e.ProblemSolutionFit,e.MvpEarlyTraction,e.ProductMarketFit,e.GrowthScaleUp,e.ExpansionPlatform,e.MaturityRenewal;const t={[e.Exploration]:{id:e.Exploration,order:0,slug:`exploration`,name:`Exploration / Ideation`,question:`Is there a problem worth my time?`,signals:[`20+ discovery interviews`,`Clear problem statement`,`Named ICP`],traps:[`Branding before discovery`,`Premature tooling decisions`],focusAreas:[`Customer discovery`,`Problem definition`,`Segment clarity`]},[e.ProblemSolutionFit]:{id:e.ProblemSolutionFit,order:1,slug:`problem-solution-fit`,name:`Problem–Solution Fit`,question:`Do people care enough about this solution?`,signals:[`Prototype reuse`,`Referral energy`,`Pre-pay interest`],traps:[`“Market is huge” without users`,`Skipping qualitative loops`],focusAreas:[`Solution hypothesis`,`Value messaging`,`Feedback capture`]},[e.MvpEarlyTraction]:{id:e.MvpEarlyTraction,order:2,slug:`mvp-early-traction`,name:`MVP & Early Traction`,question:`Can we get real usage and learn fast?`,signals:[`20–50 named active users`,`Weekly releases`,`Noisy feedback`],traps:[`Overbuilt infra for 10 users`,`Undefined retention metric`],focusAreas:[`Activation`,`Cohort tracking`,`Feedback rituals`]},[e.ProductMarketFit]:{id:e.ProductMarketFit,order:3,slug:`product-market-fit`,name:`Product–Market Fit`,question:`Is this pulling us forward?`,signals:[`Retention without heroics`,`Organic word-of-mouth`,`Value stories`],traps:[`Hero growth that does not scale`,`Ignoring churn signals`],focusAreas:[`Retention`,`Reliability`,`ICP clarity`]},[e.GrowthScaleUp]:{id:e.GrowthScaleUp,order:4,slug:`growth-scale-up`,name:`Growth / Scale-up`,question:`Can we grow this repeatably?`,signals:[`Predictable channels`,`Specialized hires`,`Unit economics on track`],traps:[`Paid spend masking retention gaps`,`Infra debt blocking launches`],focusAreas:[`Ops systems`,`Growth loops`,`Reliability engineering`]},[e.ExpansionPlatform]:{id:e.ExpansionPlatform,order:5,slug:`expansion-platform`,name:`Expansion / Platform`,question:`What is the next growth curve?`,signals:[`Stable core metrics`,`Partner/API demand`,`Ecosystem pull`],traps:[`Platform theater before wedge is solid`],focusAreas:[`Partnerships`,`APIs`,`New market validation`]},[e.MaturityRenewal]:{id:e.MaturityRenewal,order:6,slug:`maturity-renewal`,name:`Maturity / Renewal`,question:`Optimize, reinvent, or sunset?`,signals:[`Margin focus`,`Portfolio bets`,`Narrative refresh`],traps:[`Assuming past success is enough`],focusAreas:[`Cost optimization`,`Reinvention bets`,`Sunset planning`]}};export{e,t as n};\n//# sourceMappingURL=stages.js.map"],"mappings":"AAAA,IAAI,EAAE,SAAS,EAAE,CAAC,MAAO,GAAE,EAAE,YAAY,GAAG,cAAc,EAAE,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,EAAE,cAAc,GAAG,gBAAgB,EAAE,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,EAAE,gBAAgB,GAAG,kBAAkBA,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,YAAY,MAAM,EAAE,KAAK,cAAc,KAAK,yBAAyB,SAAS,oCAAoC,QAAQ,CAAC,2BAA2B,0BAA0B,YAAY,CAAC,MAAM,CAAC,4BAA4B,8BAA8B,CAAC,WAAW,CAAC,qBAAqB,qBAAqB,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,KAAK,uBAAuB,KAAK,uBAAuB,SAAS,6CAA6C,QAAQ,CAAC,kBAAkB,kBAAkB,mBAAmB,CAAC,MAAM,CAAC,iCAAiC,6BAA6B,CAAC,WAAW,CAAC,sBAAsB,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,wCAAwC,QAAQ,CAAC,2BAA2B,kBAAkB,iBAAiB,CAAC,MAAM,CAAC,+BAA+B,6BAA6B,CAAC,WAAW,CAAC,aAAa,kBAAkB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,MAAM,EAAE,KAAK,qBAAqB,KAAK,qBAAqB,SAAS,8BAA8B,QAAQ,CAAC,4BAA4B,wBAAwB,gBAAgB,CAAC,MAAM,CAAC,kCAAkC,yBAAyB,CAAC,WAAW,CAAC,YAAY,cAAc,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,MAAM,EAAE,KAAK,kBAAkB,KAAK,oBAAoB,SAAS,+BAA+B,QAAQ,CAAC,uBAAuB,oBAAoB,0BAA0B,CAAC,MAAM,CAAC,oCAAoC,+BAA+B,CAAC,WAAW,CAAC,cAAc,eAAe,0BAA0B,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,MAAM,EAAE,KAAK,qBAAqB,KAAK,uBAAuB,SAAS,iCAAiC,QAAQ,CAAC,sBAAsB,qBAAqB,iBAAiB,CAAC,MAAM,CAAC,yCAAyC,CAAC,WAAW,CAAC,eAAe,OAAO,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,KAAK,mBAAmB,KAAK,qBAAqB,SAAS,iCAAiC,QAAQ,CAAC,eAAe,iBAAiB,oBAAoB,CAAC,MAAM,CAAC,kCAAkC,CAAC,WAAW,CAAC,oBAAoB,mBAAmB,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../types/stages.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e,t}from"../libs/lifecycle/dist/types/stages.js";import"../libs/lifecycle/dist/index.js";import"../collectors/signal-collector.js";import"../scoring/stage-scorer.js";var n=class{collector;scorer;planner;constructor(e){this.collector=e.collector,this.scorer=e.scorer,this.planner=e.milestonePlanner}async run(e){let n=await this.collector.collect(e),a=this.scorer.score({metrics:n.metrics,signals:n.signals}),o=a[0]??r(),s=t[o.stage];return{stage:o.stage,confidence:o.confidence,axes:n.axes,signals:n.signals,metrics:i(n.metrics),gaps:s.focusAreas.slice(0,3),focusAreas:s.focusAreas,scorecard:a,generatedAt:new Date().toISOString()}}getUpcomingMilestones(e,t=[],n=5){return this.planner?this.planner.getUpcoming(e,t,n):[]}};const r=()=>({stage:e.Exploration,score:.3,confidence:.3,supportingSignals:[]}),i=e=>Object.entries(e??{}).reduce((e,[t,n])=>(typeof n==`number`&&(e[t]=n),e),{});export{n};
|
|
2
|
+
//# sourceMappingURL=lifecycle-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-orchestrator.js","names":["e","n","t"],"sources":["../../../../../../../modules/lifecycle-core/dist/orchestrator/lifecycle-orchestrator.js"],"sourcesContent":["import{e,n as t}from\"../libs/lifecycle/dist/types/stages.js\";import\"../libs/lifecycle/dist/index.js\";import\"../collectors/signal-collector.js\";import\"../scoring/stage-scorer.js\";var n=class{collector;scorer;planner;constructor(e){this.collector=e.collector,this.scorer=e.scorer,this.planner=e.milestonePlanner}async run(e){let n=await this.collector.collect(e),a=this.scorer.score({metrics:n.metrics,signals:n.signals}),o=a[0]??r(),s=t[o.stage];return{stage:o.stage,confidence:o.confidence,axes:n.axes,signals:n.signals,metrics:i(n.metrics),gaps:s.focusAreas.slice(0,3),focusAreas:s.focusAreas,scorecard:a,generatedAt:new Date().toISOString()}}getUpcomingMilestones(e,t=[],n=5){return this.planner?this.planner.getUpcoming(e,t,n):[]}};const r=()=>({stage:e.Exploration,score:.3,confidence:.3,supportingSignals:[]}),i=e=>Object.entries(e??{}).reduce((e,[t,n])=>(typeof n==`number`&&(e[t]=n),e),{});export{n as LifecycleOrchestrator};\n//# sourceMappingURL=lifecycle-orchestrator.js.map"],"mappings":"6KAAkL,IAAI,EAAE,KAAK,CAAC,UAAU,OAAO,QAAQ,YAAY,EAAE,CAAC,KAAK,UAAUA,EAAE,UAAU,KAAK,OAAOA,EAAE,OAAO,KAAK,QAAQA,EAAE,iBAAiB,MAAM,IAAI,EAAE,CAAC,IAAIC,EAAE,MAAM,KAAK,UAAU,QAAQD,EAAE,CAAC,EAAE,KAAK,OAAO,MAAM,CAAC,QAAQC,EAAE,QAAQ,QAAQA,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,WAAW,EAAE,WAAW,KAAKA,EAAE,KAAK,QAAQA,EAAE,QAAQ,QAAQ,EAAEA,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,UAAU,EAAE,YAAY,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,sBAAsB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,QAAQ,KAAK,QAAQ,YAAYD,EAAEE,EAAED,EAAE,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,YAAY,MAAM,GAAG,WAAW,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,QAAQD,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAACE,EAAED,MAAM,OAAOA,GAAG,WAAW,EAAEC,GAAGD,GAAGD,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e}from"../data/milestones-catalog.js";var t=class{milestones;constructor(t){this.milestones=t??e}getUpcoming(e,t=[],n=5){let r=new Set(t);return this.milestones.filter(t=>t.stage===e&&!r.has(t.id)).sort((e,t)=>e.priority-t.priority).slice(0,n)}};export{t};
|
|
2
|
+
//# sourceMappingURL=milestone-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone-planner.js","names":["t","e"],"sources":["../../../../../../../modules/lifecycle-core/dist/planning/milestone-planner.js"],"sourcesContent":["import e from\"../data/milestones-catalog.js\";var t=class{milestones;constructor(t){this.milestones=t??e}getUpcoming(e,t=[],n=5){let r=new Set(t);return this.milestones.filter(t=>t.stage===e&&!r.has(t.id)).sort((e,t)=>e.priority-t.priority).slice(0,n)}};export{t as LifecycleMilestonePlanner};\n//# sourceMappingURL=milestone-planner.js.map"],"mappings":"6CAA6C,IAAI,EAAE,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,KAAK,WAAWA,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAIA,EAAE,CAAC,OAAO,KAAK,WAAW,OAAO,GAAGA,EAAE,QAAQC,GAAG,CAAC,EAAE,IAAID,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,IAAIC,EAAE,SAASD,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e,t}from"../libs/lifecycle/dist/types/stages.js";import"../libs/lifecycle/dist/index.js";import{e as n}from"../data/stage-weights.js";const r=n;var i=class{weights;constructor(e=r){this.weights=e}score(t){let n=s(t.signals);return Object.values(e).filter(c).map(r=>{let i=e[r],s=this.weights[i]??{base:.5},c=s.base??.5,l=0,u=Object.keys(s.metrics??{}).length+Object.keys(s.signalKinds??{}).length||1,d=[];s.metrics&&Object.entries(s.metrics).forEach(([e,n])=>{let r=t.metrics[e];r!=null&&(a(r,n)?(c+=n.weight,l+=1,d.push(`metric:${e}`)):c+=n.weight*.25)}),s.signalKinds&&Object.entries(s.signalKinds).forEach(([e,t])=>{(n[e]??0)>0&&typeof t==`number`&&(c+=t,l+=1,d.push(`signal:${e}`))}),c=o(c,0,1.25);let f=o(l/u,.1,1);return{stage:r,score:c,confidence:f,supportingSignals:d}}).sort((e,t)=>t.score===e.score?t.confidence-e.confidence:t.score-e.score)}};const a=(e,t)=>(t.direction??`gte`)===`gte`?e>=t.threshold:e<=t.threshold,o=(e,t,n)=>Math.min(Math.max(e,t),n),s=e=>e.reduce((e,t)=>{let n=t.kind??`unknown`;return e[n]=(e[n]??0)+(t.weight??1),e},{}),c=e=>typeof e==`number`&&e in t;export{i};
|
|
2
|
+
//# sourceMappingURL=stage-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-scorer.js","names":["n","e","t","i","r","s","c"],"sources":["../../../../../../../modules/lifecycle-core/dist/scoring/stage-scorer.js"],"sourcesContent":["import{e,n as t}from\"../libs/lifecycle/dist/types/stages.js\";import\"../libs/lifecycle/dist/index.js\";import n from\"../data/stage-weights.js\";const r=n;var i=class{weights;constructor(e=r){this.weights=e}score(t){let n=s(t.signals);return Object.values(e).filter(c).map(r=>{let i=e[r],s=this.weights[i]??{base:.5},c=s.base??.5,l=0,u=Object.keys(s.metrics??{}).length+Object.keys(s.signalKinds??{}).length||1,d=[];s.metrics&&Object.entries(s.metrics).forEach(([e,n])=>{let r=t.metrics[e];r!=null&&(a(r,n)?(c+=n.weight,l+=1,d.push(`metric:${e}`)):c+=n.weight*.25)}),s.signalKinds&&Object.entries(s.signalKinds).forEach(([e,t])=>{(n[e]??0)>0&&typeof t==`number`&&(c+=t,l+=1,d.push(`signal:${e}`))}),c=o(c,0,1.25);let f=o(l/u,.1,1);return{stage:r,score:c,confidence:f,supportingSignals:d}}).sort((e,t)=>t.score===e.score?t.confidence-e.confidence:t.score-e.score)}};const a=(e,t)=>(t.direction??`gte`)===`gte`?e>=t.threshold:e<=t.threshold,o=(e,t,n)=>Math.min(Math.max(e,t),n),s=e=>e.reduce((e,t)=>{let n=t.kind??`unknown`;return e[n]=(e[n]??0)+(t.weight??1),e},{}),c=e=>typeof e==`number`&&e in t;export{i as StageScorer};\n//# sourceMappingURL=stage-scorer.js.map"],"mappings":"6IAA6I,MAAM,EAAEA,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,YAAY,EAAE,EAAE,CAAC,KAAK,QAAQC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAEC,EAAE,QAAQ,CAAC,OAAO,OAAO,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAIC,EAAE,EAAEC,GAAGC,EAAE,KAAK,QAAQF,IAAI,CAAC,KAAK,GAAG,CAACG,EAAED,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,OAAO,KAAKA,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,OAAO,KAAKA,EAAE,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,OAAO,QAAQA,EAAE,QAAQ,CAAC,SAAS,CAACJ,EAAED,KAAK,CAAC,IAAII,EAAEF,EAAE,QAAQD,GAAG,GAAG,OAAO,EAAEG,EAAEJ,EAAE,EAAE,GAAGA,EAAE,OAAO,GAAG,EAAE,EAAE,KAAK,UAAUC,IAAI,EAAE,GAAGD,EAAE,OAAO,MAAM,CAACK,EAAE,aAAa,OAAO,QAAQA,EAAE,YAAY,CAAC,SAAS,CAACJ,EAAEC,KAAK,EAAE,EAAED,IAAI,GAAG,GAAG,OAAOC,GAAG,WAAW,GAAGA,EAAE,GAAG,EAAE,EAAE,KAAK,UAAUD,IAAI,GAAG,CAAC,EAAE,EAAEK,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAMF,EAAE,MAAME,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,CAAC,MAAM,EAAE,IAAIJ,EAAE,QAAQD,EAAE,MAAMC,EAAE,WAAWD,EAAE,WAAWC,EAAE,MAAMD,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,KAAKC,EAAE,WAAW,SAAS,MAAMD,GAAGC,EAAE,UAAUD,GAAGC,EAAE,UAAU,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,KAAK,IAAID,EAAEC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAGD,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAEC,EAAE,MAAM,UAAU,MAAO,GAAE,IAAID,EAAE,IAAI,IAAIC,EAAE,QAAQ,GAAGD,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAOA,GAAG,UAAUA,KAAK"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { LifecycleEventBridge } from "../events/lifecycle-events.js";
|
|
2
|
+
import * as _lssm_module_lifecycle_advisor0 from "@lssm/module.lifecycle-advisor";
|
|
3
|
+
import { ContractSpecLibraryRecommender, LifecycleCeremonyDesigner, LifecycleRecommendationEngine } from "@lssm/module.lifecycle-advisor";
|
|
4
|
+
import { LifecycleAssessment, LifecycleAssessmentInput, LifecycleRecommendation, LifecycleStage } from "@lssm/lib.lifecycle";
|
|
5
|
+
import { StageSignalCollectorOptions } from "@lssm/module.lifecycle-core";
|
|
6
|
+
import { LifecycleKpiPipeline, LifecyclePipelineEvent } from "@lssm/lib.observability";
|
|
7
|
+
|
|
8
|
+
//#region src/services/assessment-service.d.ts
|
|
9
|
+
interface LifecycleAssessmentRequest extends LifecycleAssessmentInput {
|
|
10
|
+
tenantId?: string;
|
|
11
|
+
completedMilestones?: string[];
|
|
12
|
+
}
|
|
13
|
+
interface LifecycleAssessmentResponse {
|
|
14
|
+
assessment: LifecycleAssessment;
|
|
15
|
+
recommendation: LifecycleRecommendation;
|
|
16
|
+
libraries: ReturnType<ContractSpecLibraryRecommender['recommend']>;
|
|
17
|
+
ceremony?: ReturnType<LifecycleCeremonyDesigner['design']>;
|
|
18
|
+
}
|
|
19
|
+
interface LifecycleAssessmentServiceOptions {
|
|
20
|
+
collector: StageSignalCollectorOptions;
|
|
21
|
+
pipeline?: LifecycleKpiPipeline;
|
|
22
|
+
recommendationEngine?: LifecycleRecommendationEngine;
|
|
23
|
+
libraryRecommender?: ContractSpecLibraryRecommender;
|
|
24
|
+
ceremonyDesigner?: LifecycleCeremonyDesigner;
|
|
25
|
+
eventBridge?: LifecycleEventBridge;
|
|
26
|
+
onPipelineEvent?: (event: LifecyclePipelineEvent) => void;
|
|
27
|
+
}
|
|
28
|
+
declare class LifecycleAssessmentService {
|
|
29
|
+
private readonly orchestrator;
|
|
30
|
+
private readonly recommendationEngine;
|
|
31
|
+
private readonly libraryRecommender;
|
|
32
|
+
private readonly ceremonyDesigner;
|
|
33
|
+
private readonly pipeline;
|
|
34
|
+
private readonly eventBridge?;
|
|
35
|
+
constructor(options: LifecycleAssessmentServiceOptions);
|
|
36
|
+
runAssessment(request: LifecycleAssessmentRequest): Promise<LifecycleAssessmentResponse>;
|
|
37
|
+
getStagePlaybook(stage: LifecycleStage): {
|
|
38
|
+
recommendation: LifecycleRecommendation;
|
|
39
|
+
libraries: _lssm_module_lifecycle_advisor0.LibraryRecommendation[];
|
|
40
|
+
ceremony: {
|
|
41
|
+
title: string;
|
|
42
|
+
copy: string;
|
|
43
|
+
cues: string[];
|
|
44
|
+
} | undefined;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { LifecycleAssessmentRequest, LifecycleAssessmentResponse, LifecycleAssessmentService, LifecycleAssessmentServiceOptions };
|
|
49
|
+
//# sourceMappingURL=assessment-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assessment-service.d.ts","names":[],"sources":["../../src/services/assessment-service.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAyBiB,0BAAA,SAAmC;;;AAApD;AAKiB,UAAA,2BAAA,CAA2B;EAC9B,UAAA,EAAA,mBAAA;EACI,cAAA,EAAA,uBAAA;EACM,SAAA,EAAX,UAAW,CAAA,8BAAA,CAAA,WAAA,CAAA,CAAA;EAAX,QAAA,CAAA,EACA,UADA,CACW,yBADX,CAAA,QAAA,CAAA,CAAA;;AACA,UAGI,iCAAA,CAHJ;EAAU,SAAA,EAIV,2BAJU;EAGN,QAAA,CAAA,EAEJ,oBAFI;EACJ,oBAAA,CAAA,EAEY,6BAFZ;EACA,kBAAA,CAAA,EAEU,8BAFV;EACY,gBAAA,CAAA,EAEJ,yBAFI;EACF,WAAA,CAAA,EAEP,oBAFO;EACF,eAAA,CAAA,EAAA,CAAA,KAAA,EAEO,sBAFP,EAAA,GAAA,IAAA;;AAEO,cAGf,0BAAA,CAHe;EAAsB,iBAAA,YAAA;EAGrC,iBAAA,oBAA0B;EAQhB,iBAAA,kBAAA;EA0BV,iBAAA,gBAAA;EACA,iBAAA,QAAA;EAAR,iBAAA,WAAA;EAuBqB,WAAA,CAAA,OAAA,EAlDH,iCAkDG;yBAxBb,6BACR,QAAQ;0BAuBa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e,n as t,t as n}from"../libs/lifecycle/dist/types/axes.js";import"../libs/lifecycle/dist/index.js";import{i as r}from"../modules/lifecycle-core/dist/collectors/signal-collector.js";import{i}from"../modules/lifecycle-core/dist/scoring/stage-scorer.js";import{t as a}from"../modules/lifecycle-core/dist/planning/milestone-planner.js";import{n as o}from"../modules/lifecycle-core/dist/orchestrator/lifecycle-orchestrator.js";import"../modules/lifecycle-core/dist/index.js";import{n as s}from"../modules/lifecycle-advisor/dist/recommendations/recommendation-engine.js";import{t as c}from"../modules/lifecycle-advisor/dist/recommendations/library-recommender.js";import{t as l}from"../modules/lifecycle-advisor/dist/ceremony/ceremony-designer.js";import"../modules/lifecycle-advisor/dist/index.js";import{a as u}from"../libs/observability/dist/pipeline/lifecycle-pipeline.js";import"../libs/observability/dist/index.js";import"../events/lifecycle-events.js";var d=class{orchestrator;recommendationEngine;libraryRecommender;ceremonyDesigner;pipeline;eventBridge;constructor(e){this.orchestrator=new o({collector:new r(e.collector),scorer:new i,milestonePlanner:new a}),this.recommendationEngine=e.recommendationEngine??new s,this.libraryRecommender=e.libraryRecommender??new c,this.ceremonyDesigner=e.ceremonyDesigner??new l,this.pipeline=e.pipeline??new u,this.eventBridge=e.eventBridge,e.onPipelineEvent&&this.pipeline.on(e.onPipelineEvent),this.eventBridge&&this.pipeline.on(e=>this.eventBridge?.forward(e))}async runAssessment(e){let t=await this.orchestrator.run(e),n=this.orchestrator.getUpcomingMilestones(t.stage,e.completedMilestones);return this.pipeline.recordAssessment(t,e.tenantId),{assessment:t,recommendation:this.recommendationEngine.generate(t,{upcomingMilestones:n}),libraries:this.libraryRecommender.recommend(t.stage),ceremony:this.ceremonyDesigner.design(t.stage)}}getStagePlaybook(r){return{recommendation:this.recommendationEngine.generate({stage:r,confidence:1,axes:{product:e.Mvp,company:n.TinyTeam,capital:t.Seed},signals:[],gaps:[],focusAreas:[],scorecard:[],generatedAt:new Date().toISOString()},{upcomingMilestones:this.orchestrator.getUpcomingMilestones(r)}),libraries:this.libraryRecommender.recommend(r),ceremony:this.ceremonyDesigner.design(r)}}};export{d as LifecycleAssessmentService};
|
|
2
|
+
//# sourceMappingURL=assessment-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assessment-service.js","names":["LifecycleOrchestrator","StageSignalCollector","StageScorer","LifecycleMilestonePlanner","LifecycleRecommendationEngine","ContractSpecLibraryRecommender","LifecycleCeremonyDesigner","LifecycleKpiPipeline","ProductPhase","CompanyPhase","CapitalPhase"],"sources":["../../src/services/assessment-service.ts"],"sourcesContent":["import type {\n LifecycleAssessment,\n LifecycleAssessmentInput,\n LifecycleRecommendation,\n LifecycleStage,\n} from '@lssm/lib.lifecycle';\nimport { ProductPhase, CompanyPhase, CapitalPhase } from '@lssm/lib.lifecycle';\nimport {\n LifecycleOrchestrator,\n StageSignalCollector,\n StageScorer,\n LifecycleMilestonePlanner,\n type StageSignalCollectorOptions,\n} from '@lssm/module.lifecycle-core';\nimport {\n LifecycleRecommendationEngine,\n ContractSpecLibraryRecommender,\n LifecycleCeremonyDesigner,\n} from '@lssm/module.lifecycle-advisor';\nimport {\n LifecycleKpiPipeline,\n type LifecyclePipelineEvent,\n} from '@lssm/lib.observability';\nimport { LifecycleEventBridge } from '../events/lifecycle-events';\n\nexport interface LifecycleAssessmentRequest extends LifecycleAssessmentInput {\n tenantId?: string;\n completedMilestones?: string[];\n}\n\nexport interface LifecycleAssessmentResponse {\n assessment: LifecycleAssessment;\n recommendation: LifecycleRecommendation;\n libraries: ReturnType<ContractSpecLibraryRecommender['recommend']>;\n ceremony?: ReturnType<LifecycleCeremonyDesigner['design']>;\n}\n\nexport interface LifecycleAssessmentServiceOptions {\n collector: StageSignalCollectorOptions;\n pipeline?: LifecycleKpiPipeline;\n recommendationEngine?: LifecycleRecommendationEngine;\n libraryRecommender?: ContractSpecLibraryRecommender;\n ceremonyDesigner?: LifecycleCeremonyDesigner;\n eventBridge?: LifecycleEventBridge;\n onPipelineEvent?: (event: LifecyclePipelineEvent) => void;\n}\n\nexport class LifecycleAssessmentService {\n private readonly orchestrator: LifecycleOrchestrator;\n private readonly recommendationEngine: LifecycleRecommendationEngine;\n private readonly libraryRecommender: ContractSpecLibraryRecommender;\n private readonly ceremonyDesigner: LifecycleCeremonyDesigner;\n private readonly pipeline: LifecycleKpiPipeline;\n private readonly eventBridge?: LifecycleEventBridge;\n\n constructor(options: LifecycleAssessmentServiceOptions) {\n const collector = new StageSignalCollector(options.collector);\n const scorer = new StageScorer();\n const milestonePlanner = new LifecycleMilestonePlanner();\n this.orchestrator = new LifecycleOrchestrator({\n collector,\n scorer,\n milestonePlanner,\n });\n this.recommendationEngine =\n options.recommendationEngine ?? new LifecycleRecommendationEngine();\n this.libraryRecommender =\n options.libraryRecommender ?? new ContractSpecLibraryRecommender();\n this.ceremonyDesigner =\n options.ceremonyDesigner ?? new LifecycleCeremonyDesigner();\n this.pipeline = options.pipeline ?? new LifecycleKpiPipeline();\n this.eventBridge = options.eventBridge;\n if (options.onPipelineEvent) {\n this.pipeline.on(options.onPipelineEvent);\n }\n if (this.eventBridge) {\n this.pipeline.on((event) => this.eventBridge?.forward(event));\n }\n }\n\n async runAssessment(\n request: LifecycleAssessmentRequest\n ): Promise<LifecycleAssessmentResponse> {\n const assessment = await this.orchestrator.run(request);\n const upcoming = this.orchestrator.getUpcomingMilestones(\n assessment.stage,\n request.completedMilestones\n );\n this.pipeline.recordAssessment(assessment, request.tenantId);\n\n const recommendation = this.recommendationEngine.generate(assessment, {\n upcomingMilestones: upcoming,\n });\n\n const libraries = this.libraryRecommender.recommend(assessment.stage);\n const ceremony = this.ceremonyDesigner.design(assessment.stage);\n\n return {\n assessment,\n recommendation,\n libraries,\n ceremony,\n };\n }\n\n getStagePlaybook(stage: LifecycleStage) {\n const recommendation = this.recommendationEngine.generate(\n {\n stage,\n confidence: 1,\n axes: {\n product: ProductPhase.Mvp,\n company: CompanyPhase.TinyTeam,\n capital: CapitalPhase.Seed,\n },\n signals: [],\n gaps: [],\n focusAreas: [],\n scorecard: [],\n generatedAt: new Date().toISOString(),\n },\n { upcomingMilestones: this.orchestrator.getUpcomingMilestones(stage) }\n );\n\n return {\n recommendation,\n libraries: this.libraryRecommender.recommend(stage),\n ceremony: this.ceremonyDesigner.design(stage),\n };\n }\n}\n"],"mappings":"g8BA+CA,IAAa,EAAb,KAAwC,CACtC,aACA,qBACA,mBACA,iBACA,SACA,YAEA,YAAY,EAA4C,CAItD,KAAK,aAAe,IAAIA,EAAsB,CAC5C,UAJgB,IAAIC,EAAqB,EAAQ,UAAU,CAK3D,OAJa,IAAIC,EAKjB,iBAJuB,IAAIC,EAK5B,CAAC,CACF,KAAK,qBACH,EAAQ,sBAAwB,IAAIC,EACtC,KAAK,mBACH,EAAQ,oBAAsB,IAAIC,EACpC,KAAK,iBACH,EAAQ,kBAAoB,IAAIC,EAClC,KAAK,SAAW,EAAQ,UAAY,IAAIC,EACxC,KAAK,YAAc,EAAQ,YACvB,EAAQ,iBACV,KAAK,SAAS,GAAG,EAAQ,gBAAgB,CAEvC,KAAK,aACP,KAAK,SAAS,GAAI,GAAU,KAAK,aAAa,QAAQ,EAAM,CAAC,CAIjE,MAAM,cACJ,EACsC,CACtC,IAAM,EAAa,MAAM,KAAK,aAAa,IAAI,EAAQ,CACjD,EAAW,KAAK,aAAa,sBACjC,EAAW,MACX,EAAQ,oBACT,CAUD,OATA,KAAK,SAAS,iBAAiB,EAAY,EAAQ,SAAS,CASrD,CACL,aACA,eATqB,KAAK,qBAAqB,SAAS,EAAY,CACpE,mBAAoB,EACrB,CAAC,CAQA,UANgB,KAAK,mBAAmB,UAAU,EAAW,MAAM,CAOnE,SANe,KAAK,iBAAiB,OAAO,EAAW,MAAM,CAO9D,CAGH,iBAAiB,EAAuB,CAmBtC,MAAO,CACL,eAnBqB,KAAK,qBAAqB,SAC/C,CACE,QACA,WAAY,EACZ,KAAM,CACJ,QAASC,EAAa,IACtB,QAASC,EAAa,SACtB,QAASC,EAAa,KACvB,CACD,QAAS,EAAE,CACX,KAAM,EAAE,CACR,WAAY,EAAE,CACd,UAAW,EAAE,CACb,YAAa,IAAI,MAAM,CAAC,aAAa,CACtC,CACD,CAAE,mBAAoB,KAAK,aAAa,sBAAsB,EAAM,CAAE,CACvE,CAIC,UAAW,KAAK,mBAAmB,UAAU,EAAM,CACnD,SAAU,KAAK,iBAAiB,OAAO,EAAM,CAC9C"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lssm/bundle.lifecycle-managed",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "bun build:bundle && bun build:types",
|
|
14
|
+
"build:bundle": "tsdown",
|
|
15
|
+
"build:types": "tsc --noEmit",
|
|
16
|
+
"dev": "bun build:bundle --watch",
|
|
17
|
+
"clean": "rimraf dist .turbo",
|
|
18
|
+
"lint": "bun lint:fix",
|
|
19
|
+
"lint:fix": "eslint src --fix",
|
|
20
|
+
"lint:check": "eslint src",
|
|
21
|
+
"test": "vitest run"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@lssm/lib.ai-agent": "workspace:*",
|
|
25
|
+
"@lssm/lib.analytics": "workspace:*",
|
|
26
|
+
"@lssm/lib.lifecycle": "workspace:*",
|
|
27
|
+
"@lssm/lib.observability": "workspace:*",
|
|
28
|
+
"@lssm/module.lifecycle-advisor": "workspace:*",
|
|
29
|
+
"@lssm/module.lifecycle-core": "workspace:*"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@lssm/tool.tsdown": "workspace:*",
|
|
33
|
+
"@lssm/tool.typescript": "workspace:*",
|
|
34
|
+
"tsdown": "^0.16.6",
|
|
35
|
+
"typescript": "^5.9.3",
|
|
36
|
+
"vitest": "^1.6.0"
|
|
37
|
+
},
|
|
38
|
+
"exports": {
|
|
39
|
+
".": "./dist/index.js",
|
|
40
|
+
"./*": "./*"
|
|
41
|
+
}
|
|
42
|
+
}
|