@owlmeans/viable-common 0.0.19 → 0.0.20

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.
Files changed (118) hide show
  1. package/README.md +2 -2
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/agent-presentation/SKILL.md +1 -1
  4. package/agent-meta/skills/viable-common/SKILL.md +195 -10
  5. package/build/ba/consts.d.ts +2 -3
  6. package/build/ba/consts.d.ts.map +1 -1
  7. package/build/ba/consts.js +2 -3
  8. package/build/ba/consts.js.map +1 -1
  9. package/build/ba/helpers.d.ts +2 -1
  10. package/build/ba/helpers.d.ts.map +1 -1
  11. package/build/ba/helpers.js +3 -2
  12. package/build/ba/helpers.js.map +1 -1
  13. package/build/ba/types.d.ts +17 -2
  14. package/build/ba/types.d.ts.map +1 -1
  15. package/build/connect/consts.d.ts +5 -8
  16. package/build/connect/consts.d.ts.map +1 -1
  17. package/build/connect/consts.js +5 -8
  18. package/build/connect/consts.js.map +1 -1
  19. package/build/connect/entrypoints.d.ts +1 -43
  20. package/build/connect/entrypoints.d.ts.map +1 -1
  21. package/build/connect/entrypoints.js +1 -18
  22. package/build/connect/entrypoints.js.map +1 -1
  23. package/build/connect/index.d.ts +1 -0
  24. package/build/connect/index.d.ts.map +1 -1
  25. package/build/connect/index.js +1 -0
  26. package/build/connect/index.js.map +1 -1
  27. package/build/connect/jobs.d.ts +25 -0
  28. package/build/connect/jobs.d.ts.map +1 -0
  29. package/build/connect/jobs.js +29 -0
  30. package/build/connect/jobs.js.map +1 -0
  31. package/build/connect/references.d.ts +1 -40
  32. package/build/connect/references.d.ts.map +1 -1
  33. package/build/connect/references.js +0 -8
  34. package/build/connect/references.js.map +1 -1
  35. package/build/connect/schemas.d.ts +1 -7
  36. package/build/connect/schemas.d.ts.map +1 -1
  37. package/build/connect/schemas.js +1 -25
  38. package/build/connect/schemas.js.map +1 -1
  39. package/build/connect/types.d.ts +30 -45
  40. package/build/connect/types.d.ts.map +1 -1
  41. package/build/design/consts.d.ts +0 -2
  42. package/build/design/consts.d.ts.map +1 -1
  43. package/build/design/consts.js +0 -2
  44. package/build/design/consts.js.map +1 -1
  45. package/build/design/helpers.d.ts +6 -2
  46. package/build/design/helpers.d.ts.map +1 -1
  47. package/build/design/helpers.js +6 -2
  48. package/build/design/helpers.js.map +1 -1
  49. package/build/design/types.d.ts +12 -11
  50. package/build/design/types.d.ts.map +1 -1
  51. package/build/execution/types.d.ts +11 -0
  52. package/build/execution/types.d.ts.map +1 -1
  53. package/build/index.d.ts +1 -0
  54. package/build/index.d.ts.map +1 -1
  55. package/build/index.js +1 -0
  56. package/build/index.js.map +1 -1
  57. package/build/planning/consts.d.ts +141 -0
  58. package/build/planning/consts.d.ts.map +1 -0
  59. package/build/planning/consts.js +170 -0
  60. package/build/planning/consts.js.map +1 -0
  61. package/build/planning/errors.d.ts +64 -0
  62. package/build/planning/errors.d.ts.map +1 -0
  63. package/build/planning/errors.js +99 -0
  64. package/build/planning/errors.js.map +1 -0
  65. package/build/planning/flows.d.ts +34 -0
  66. package/build/planning/flows.d.ts.map +1 -0
  67. package/build/planning/flows.js +174 -0
  68. package/build/planning/flows.js.map +1 -0
  69. package/build/planning/helpers.d.ts +54 -0
  70. package/build/planning/helpers.d.ts.map +1 -0
  71. package/build/planning/helpers.js +101 -0
  72. package/build/planning/helpers.js.map +1 -0
  73. package/build/planning/index.d.ts +7 -0
  74. package/build/planning/index.d.ts.map +1 -0
  75. package/build/planning/index.js +6 -0
  76. package/build/planning/index.js.map +1 -0
  77. package/build/planning/schemas.d.ts +23 -0
  78. package/build/planning/schemas.d.ts.map +1 -0
  79. package/build/planning/schemas.js +65 -0
  80. package/build/planning/schemas.js.map +1 -0
  81. package/build/planning/types.d.ts +70 -0
  82. package/build/planning/types.d.ts.map +1 -0
  83. package/build/planning/types.js +2 -0
  84. package/build/planning/types.js.map +1 -0
  85. package/build/scaffold/schemas.d.ts.map +1 -1
  86. package/build/scaffold/schemas.js +7 -2
  87. package/build/scaffold/schemas.js.map +1 -1
  88. package/build/scaffold/types.d.ts +5 -1
  89. package/build/scaffold/types.d.ts.map +1 -1
  90. package/package.json +3 -1
  91. package/src/ba/consts.ts +2 -3
  92. package/src/ba/helpers.ts +3 -2
  93. package/src/ba/types.ts +17 -2
  94. package/src/connect/consts.ts +5 -8
  95. package/src/connect/entrypoints.ts +2 -41
  96. package/src/connect/index.ts +1 -0
  97. package/src/connect/jobs.ts +40 -0
  98. package/src/connect/references.ts +1 -22
  99. package/src/connect/schemas.ts +2 -29
  100. package/src/connect/types.ts +30 -51
  101. package/src/design/consts.ts +0 -3
  102. package/src/design/helpers.ts +6 -2
  103. package/src/design/types.ts +12 -11
  104. package/src/execution/types.ts +11 -0
  105. package/src/index.ts +1 -0
  106. package/src/planning/consts.ts +182 -0
  107. package/src/planning/errors.ts +117 -0
  108. package/src/planning/flows.ts +204 -0
  109. package/src/planning/helpers.ts +133 -0
  110. package/src/planning/index.ts +6 -0
  111. package/src/planning/schemas.ts +70 -0
  112. package/src/planning/types.ts +75 -0
  113. package/src/scaffold/schemas.ts +7 -2
  114. package/src/scaffold/types.ts +10 -1
  115. package/tests/branding.spec.ts +37 -0
  116. package/tests/connect-entrypoints.spec.ts +35 -3
  117. package/tests/design.spec.ts +3 -3
  118. package/tests/planning.spec.ts +356 -0
@@ -0,0 +1,65 @@
1
+ import { CODE_MAX } from '@owlmeans/planning';
2
+ import { ProjectArea } from '../areas/consts.js';
3
+ import { StoryKind } from '../ba/consts.js';
4
+ import { ConnectLlm, ConnectTarget } from '../connect/consts.js';
5
+ import { ProjectOriginSchema } from '../convert/schemas.js';
6
+ import { StoryActor } from '../design/runtime.js';
7
+ /**
8
+ * The `fields` schema of a `viable:project` card.
9
+ *
10
+ * A record-element schema: hand-written, cast, every optional key nullable with its type, every
11
+ * nullable enum listing `null`. Plain strings where the vocabulary grows in a library this record
12
+ * does not redeploy with (blueprint, case, game kind).
13
+ */
14
+ export const ViableProjectFieldsSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ formerAliases: {
18
+ type: 'array', items: { type: 'string', minLength: 1, maxLength: CODE_MAX }, nullable: true,
19
+ },
20
+ language: { type: 'string', minLength: 2, maxLength: 16, nullable: true },
21
+ blueprint: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
22
+ blueprintCase: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
23
+ gameKind: { type: 'string', minLength: 1, maxLength: 64, nullable: true },
24
+ target: { type: 'string', enum: [...Object.values(ConnectTarget), null], nullable: true },
25
+ origin: { ...ProjectOriginSchema, nullable: true },
26
+ connectLlmMode: { type: 'string', enum: [...Object.values(ConnectLlm), null], nullable: true },
27
+ converterLlmMode: { type: 'string', enum: [...Object.values(ConnectLlm), null], nullable: true },
28
+ },
29
+ required: [],
30
+ additionalProperties: false,
31
+ };
32
+ /**
33
+ * The `fields` schema of a `viable:user-story` card.
34
+ *
35
+ * `area` is required, and a create that carries none is still valid by the time it is checked:
36
+ * validation runs after the planning middlewares, and the viable plugin's re-format hook fills the
37
+ * area of a narrative a person wrote.
38
+ */
39
+ export const ViableStoryFieldsSchema = {
40
+ type: 'object',
41
+ properties: {
42
+ area: { type: 'string', enum: Object.values(ProjectArea) },
43
+ primary: { type: 'boolean' },
44
+ actor: { type: 'string', enum: [...Object.values(StoryActor), null], nullable: true },
45
+ warning: { type: 'string', maxLength: 1024, nullable: true },
46
+ kind: { type: 'string', enum: [...Object.values(StoryKind), null], nullable: true },
47
+ },
48
+ required: ['area', 'primary'],
49
+ additionalProperties: false,
50
+ };
51
+ /** The open `fields` of a reserved card type — nothing is decided about them yet. */
52
+ export const ViableOpenFieldsSchema = {
53
+ type: 'object',
54
+ properties: {},
55
+ required: [],
56
+ additionalProperties: true,
57
+ };
58
+ /** A document carries nothing under `fields`: its payload is the specification body. */
59
+ export const ViableSpecFieldsSchema = {
60
+ type: 'object',
61
+ properties: {},
62
+ required: [],
63
+ additionalProperties: false,
64
+ };
65
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/planning/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { Card, Project, Specification } from '@owlmeans/planning';
2
+ import type { ProjectArea } from '../areas/consts.js';
3
+ import type { StoryKind } from '../ba/consts.js';
4
+ import type { ConnectLlm, ConnectTarget } from '../connect/consts.js';
5
+ import type { ProjectOrigin } from '../convert/types.js';
6
+ import type { StoryActor } from '../design/runtime.js';
7
+ import type { StoryWriteInput } from '../metadata/types.js';
8
+ /**
9
+ * What a `viable:project` card keeps under `fields`.
10
+ *
11
+ * The alias is the card's `code`, the name its `title`; the brief parts are specifications. Every
12
+ * key is optional: a project created before a field existed carries none, and an absent value
13
+ * means the platform default (inherit a mode, the default blueprint, a cloud slot).
14
+ */
15
+ export type ViableProjectFields = {
16
+ /** Aliases this project gave up. Names are retired, never freed to a sibling project. */
17
+ formerAliases?: string[];
18
+ /** The IETF tag generated UI text is written in. */
19
+ language?: string;
20
+ /** The blueprint id the project was drawn with. */
21
+ blueprint?: string;
22
+ /** The blueprint case classified from the prompt. Absent applies no patch. */
23
+ blueprintCase?: string;
24
+ /** How a game is played; absent for every other case. */
25
+ gameKind?: string;
26
+ /** Where the tree lives; absent is the platform's own slot. */
27
+ target?: ConnectTarget;
28
+ /** Where converted code came from; present only on an import. */
29
+ origin?: ProjectOrigin;
30
+ /** Who performs a run's model calls on this project; absent inherits the owner's preference. */
31
+ connectLlmMode?: ConnectLlm;
32
+ /** Who performs a conversion's model calls on this project; absent inherits. */
33
+ converterLlmMode?: ConnectLlm;
34
+ };
35
+ /**
36
+ * What a `viable:user-story` card keeps under `fields`.
37
+ *
38
+ * The narrative is the card's `title`, the flow ordinal its `order` (a double — a connective story
39
+ * sits between two flow steps), the status its primary flow status.
40
+ */
41
+ export type ViableStoryFields = {
42
+ /** The audience acting in the story; its screens hang under this area. */
43
+ area: ProjectArea;
44
+ /** The story whose screen is the project's front door. Exactly one per project. */
45
+ primary: boolean;
46
+ /** Who acts; absent is a person. */
47
+ actor?: StoryActor;
48
+ /** Why the last development did not end cleanly. Written as `''` to clear. */
49
+ warning?: string;
50
+ /** Which half of the analysis the story came from. */
51
+ kind?: StoryKind;
52
+ };
53
+ export interface ViableProjectCard extends Project {
54
+ fields: ViableProjectFields;
55
+ }
56
+ export interface ViableStoryCard extends Card {
57
+ fields: ViableStoryFields;
58
+ }
59
+ /** A document under a Viable card — the brief parts, the scaffold plan, a story design. */
60
+ export type ViableSpecification = Specification;
61
+ /**
62
+ * What a develop run hands the metadata store beside the card.
63
+ *
64
+ * The code, the narrative and the primary flag are the CARD's and are never passed separately — a
65
+ * second copy is a second answer. `status` defaults to the card's own.
66
+ */
67
+ export type StoryWriteContent = Omit<StoryWriteInput, 'code' | 'narrative' | 'primary' | 'status'> & {
68
+ status?: string;
69
+ };
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/planning/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,gGAAgG;IAChG,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,UAAU,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,WAAW,CAAA;IACjB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAA;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,MAAM,EAAE,mBAAmB,CAAA;CAC5B;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI;IAC3C,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,2FAA2F;AAC3F,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC,GAClE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/planning/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAIzC,OAAO,KAAK,EACK,eAAe,EAAoB,YAAY,EAC/D,MAAM,YAAY,CAAA;AAqOnB,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,eAAe,CAkBjE,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA2B3D,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAIzC,OAAO,KAAK,EACK,eAAe,EAAoB,YAAY,EAC/D,MAAM,YAAY,CAAA;AA0OnB,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,eAAe,CAkBjE,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA2B3D,CAAA"}
@@ -159,15 +159,20 @@ const GuestHomePlanSchema = {
159
159
  hero: {
160
160
  type: 'object',
161
161
  properties: {
162
- eyebrow: { type: 'string', description: 'A 2-4 word positioning phrase above the headline' },
163
162
  headline: {
164
163
  type: 'string',
165
164
  description: 'The product\'s promise in one line, under 9 words. Never the product name alone'
166
165
  },
167
166
  sub: { type: 'string', description: 'One or two sentences: what it does and who it is for' },
168
167
  cta: { type: 'string', description: 'The call-to-action label, 2-3 words' },
168
+ eyebrow: {
169
+ type: 'string', nullable: true,
170
+ description: 'OPTIONAL, normally omitted. A small badge above the headline - set it only when'
171
+ + ' the specification explicitly asks for a label there. A landing page carries no badge by'
172
+ + ' default: the headline is what positions the product'
173
+ },
169
174
  },
170
- required: ['eyebrow', 'headline', 'sub', 'cta'],
175
+ required: ['headline', 'sub', 'cta'],
171
176
  additionalProperties: false,
172
177
  },
173
178
  problem: {
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/scaffold/schemas.ts"],"names":[],"mappings":"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"}
@@ -100,10 +100,14 @@ export interface ProductIdentity {
100
100
  /** The guest area's landing page — the product's public face. */
101
101
  export interface GuestHomePlan {
102
102
  hero: {
103
- eyebrow: string;
104
103
  headline: string;
105
104
  sub: string;
106
105
  cta: string;
106
+ /**
107
+ * A badge above the headline — OPTIONAL and normally absent. A landing page carries no badge
108
+ * unless its specification asks for one; the headline is what positions the product.
109
+ */
110
+ eyebrow?: string;
107
111
  };
108
112
  problem: {
109
113
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/viable-common",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "license": "MIT",
5
5
  "description": "Runtime-free contracts of the OwlMeans Viable platform — the analysis, design and metadata shapes of a generated project, its target-shape manifest, the slot command vocabulary, the connector protocol and the conversion vocabulary.",
6
6
  "type": "module",
@@ -63,6 +63,8 @@
63
63
  "@owlmeans/entrypoint": "^0.1.18-rc.27",
64
64
  "@owlmeans/error": "^0.1.18-rc.26",
65
65
  "@owlmeans/llm-common": "^0.1.18-rc.27",
66
+ "@owlmeans/planning": "^0.1.18-rc.0",
67
+ "@owlmeans/resource": "^0.1.18-rc.26",
66
68
  "@owlmeans/route": "^0.1.18-rc.25"
67
69
  },
68
70
  "publishConfig": {
package/src/ba/consts.ts CHANGED
@@ -30,9 +30,8 @@ export enum ConnectingStoryKind {
30
30
  * Which half of the analysis a story came from.
31
31
  *
32
32
  * `flow` stories implement the numbered steps of the main flow — each adds value to one record.
33
- * `connective` stories are what a person needs to get from one step to the next. Neither is
34
- * persisted: the init pipeline is the only thing that has ever needed to tell them apart, and it
35
- * knows at creation time.
33
+ * `connective` stories are what a person needs to get from one step to the next. Persisted on the
34
+ * story card as `fields.kind`, so the distinction survives the pipeline that drew it.
36
35
  */
37
36
  export enum StoryKind {
38
37
  Flow = 'flow',
package/src/ba/helpers.ts CHANGED
@@ -28,7 +28,8 @@ const canonical = (story: string): string => story.trim().replace(/\s+/g, ' ').t
28
28
  *
29
29
  * This is the only place the anchor is interpreted. Both halves of the feature — the prompt that
30
30
  * produces it and the pipeline that persists the result — read it through here, or the two drift
31
- * and nothing fails loudly enough to notice.
31
+ * and nothing fails loudly enough to notice. The CLAMPED anchor is carried out on each connective
32
+ * entry as `after`, which is what the story card's `follows` relationship is written from.
32
33
  *
33
34
  * Four properties are deliberate:
34
35
  *
@@ -87,7 +88,7 @@ export const mergeConnectingStories = (
87
88
  return flow.flatMap(({ story, area }, index) => [
88
89
  { story, area, kind: StoryKind.Flow },
89
90
  ...buckets[index]!.map(draft => (
90
- { story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective }
91
+ { story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective, after: index + 1 }
91
92
  )),
92
93
  ])
93
94
  }
package/src/ba/types.ts CHANGED
@@ -35,11 +35,14 @@ export interface ConnectingStoryList {
35
35
  * One entry of the single ordered story list init persists — the flow interleaved with the
36
36
  * stories that connect it.
37
37
  *
38
- * `kind` survives only as far as the consumer that creates the records; nothing downstream of the
39
- * story list has ever had a use for it.
38
+ * `kind` is persisted on the story card (`fields.kind`). `after` is present on a connective entry
39
+ * only and becomes the card's `follows` relationship: the 1-based position, counted among the
40
+ * `flow` entries of the same list, of the flow story it follows — already clamped, so it always
41
+ * names a flow story that list contains.
40
42
  */
41
43
  export interface MergedStoryDraft extends StoryDraft {
42
44
  kind: StoryKind
45
+ after?: number
43
46
  }
44
47
 
45
48
  export interface UserStory {
@@ -97,8 +100,20 @@ export interface Attribute {
97
100
  description: string
98
101
  }
99
102
 
103
+ /**
104
+ * The project BRIEF a generator reads — assembled from the project card and its specifications
105
+ * (`projectBriefOf`), never stored in this shape.
106
+ */
100
107
  export interface AgentProject {
101
108
  name: string
109
+ /**
110
+ * The project card's `code` — the slug the platform minted and every generated address is
111
+ * composed from.
112
+ *
113
+ * Optional because a brief is also assembled before a project has one. A reader that needs a
114
+ * slug prefers this over re-deriving one from `name`: a rename changes the name, never the code.
115
+ */
116
+ alias?: string
102
117
  description: string
103
118
  specification: string
104
119
  designSystem: string
@@ -382,6 +382,11 @@ export const RES_CONNECT_SESSION = 'connect-session'
382
382
  * the manager API all address the same aliases, and a client that had to be handed its own copy of
383
383
  * the tree would be a second place for a name to drift. The platform spreads the declarations
384
384
  * these produce into its own entrypoint list and binds handlers onto them.
385
+ *
386
+ * There is no story group. A user story is a planning CARD, read and written through the planning
387
+ * protocol tree the platform mounts beside this one (`makePlanningProtocols` in
388
+ * `@owlmeans/planning`) — one surface for the browser and a connector alike, so a story rule the
389
+ * platform enforces cannot be enforced on one of them only.
385
390
  */
386
391
  export const connect = Object.freeze({
387
392
  base: 'viable:manager-api:connect:base',
@@ -424,14 +429,6 @@ export const connect = Object.freeze({
424
429
  inquiry: Object.freeze({
425
430
  answer: 'viable:manager-api:connect:inquiry:answer',
426
431
  }),
427
- story: Object.freeze({
428
- list: 'viable:manager-api:connect:story:list',
429
- get: 'viable:manager-api:connect:story:get',
430
- create: 'viable:manager-api:connect:story:create',
431
- update: 'viable:manager-api:connect:story:update',
432
- delete: 'viable:manager-api:connect:story:delete',
433
- develop: 'viable:manager-api:connect:story:develop',
434
- }),
435
432
  files: Object.freeze({
436
433
  list: 'viable:manager-api:connect:files:list',
437
434
  }),
@@ -9,15 +9,13 @@ import {
9
9
  ConnectJobParamsSchema, ConnectModifyBodySchema, ConnectOpParamsSchema, ConnectOpResultSchema,
10
10
  ConnectPipelineParamsSchema, ConnectPipelineResumeBodySchema, ConnectProjectIdSchema,
11
11
  ConnectProjectLlmBodySchema, ConnectSessionOpenSchema, ConnectSessionParamsSchema,
12
- ConnectStoryBodySchema, ConnectStoryParamsSchema, ConnectStoryQuerySchema, ConnectWaitQuerySchema,
13
- InquiryAnswerSchema,
12
+ ConnectWaitQuerySchema, InquiryAnswerSchema,
14
13
  } from './schemas.js'
15
14
  import type {
16
15
  ConnectAttachBody, ConnectConfirmBody, ConnectConvertCreateBody, ConnectConvertProceedBody,
17
16
  ConnectCreateBody, ConnectInquiryAnswerBody, ConnectJob, ConnectJobParams, ConnectModifyBody,
18
17
  ConnectPipelineParams, ConnectPipelineResumeBody, ConnectProjectLlmBody, ConnectSessionOpen,
19
- ConnectSessionParams, ConnectStoryBody, ConnectStoryQuery, ConnectWaitQuery, ConversionStatusView,
20
- ConvertCheck,
18
+ ConnectSessionParams, ConnectWaitQuery, ConversionStatusView, ConvertCheck,
21
19
  } from './types.js'
22
20
  import type { ConnectOpResult } from './ops.js'
23
21
  import type { ConverterProjectLlmBody } from '../convert/types.js'
@@ -198,43 +196,6 @@ export const connectProtocols = (opts: ConnectEntrypointOptions) => {
198
196
 
199
197
  },
200
198
 
201
- // --- stories ---------------------------------------------------------------------------
202
- story: {
203
- list: protocol(
204
- route(connect.story.list, '/story/:id', { parent: base, method: RouteMethod.GET }),
205
- contract.request({ params: typed<{ id: string }>(ConnectProjectIdSchema), query: typed<ConnectStoryQuery>(ConnectStoryQuerySchema) }, typed())
206
- ),
207
- create: protocol(
208
- route(connect.story.create, '/story/:id', { parent: base, method: RouteMethod.POST }),
209
- contract.request({ params: typed<{ id: string }>(ConnectProjectIdSchema), body: typed<ConnectStoryBody>(ConnectStoryBodySchema) }, typed())
210
- ),
211
- get: protocol(
212
- route(connect.story.get, '/story/:id/:storyId', {
213
- parent: base, method: RouteMethod.GET
214
- }),
215
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
216
- ),
217
- update: protocol(
218
- route(connect.story.update, '/story/:id/:storyId', {
219
- parent: base, method: RouteMethod.PUT
220
- }),
221
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema), body: typed<ConnectStoryBody>(ConnectStoryBodySchema) }, typed())
222
- ),
223
- delete: protocol(
224
- route(connect.story.delete, '/story/:id/:storyId', {
225
- parent: base, method: RouteMethod.DELETE
226
- }),
227
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
228
- ),
229
- develop: protocol(
230
- route(connect.story.develop, '/story/:id/:storyId/develop', {
231
- parent: base, method: RouteMethod.POST
232
- }),
233
- contract.request({ params: typed<{ id: string, storyId: string }>(ConnectStoryParamsSchema) }, typed())
234
- ),
235
-
236
- },
237
-
238
199
  // --- generated files and conversion ----------------------------------------------------
239
200
  files: {
240
201
  list: protocol(
@@ -3,5 +3,6 @@ export * from './schemas.js'
3
3
  export * from './errors.js'
4
4
  export * from './entrypoints.js'
5
5
  export * from './references.js'
6
+ export * from './jobs.js'
6
7
  export type * from './types.js'
7
8
  export type * from './ops.js'
@@ -0,0 +1,40 @@
1
+ import type { ConnectJobKind } from './consts.js'
2
+
3
+ /**
4
+ * The separator a job id is joined with.
5
+ *
6
+ * `~`, because every other separator in play is already spoken for: a route alias is
7
+ * colon-delimited and so is every run id (`init:<projectId>`, `story:<storyId>`), so a job id
8
+ * built with one could not be split back apart.
9
+ */
10
+ export const JOB_SEPARATOR = '~'
11
+
12
+ /**
13
+ * A job's id: its kind, the project card it belongs to, and the subject it is about.
14
+ *
15
+ * The suffix is a CARD id for a story job and a run id for a pipeline job — never a story code.
16
+ * Declared here rather than by whoever answers the job, because the SDK composes the id it then
17
+ * polls for: two spellings of one id is a job nobody can find.
18
+ */
19
+ export const jobIdOf = (kind: ConnectJobKind, projectId: string, suffix?: string): string =>
20
+ [kind, projectId, ...(suffix != null ? [suffix] : [])].join(JOB_SEPARATOR)
21
+
22
+ export interface ParsedJobId {
23
+ kind: ConnectJobKind
24
+ projectId: string
25
+ suffix?: string
26
+ }
27
+
28
+ /** Split a job id back into what {@link jobIdOf} composed it from. */
29
+ export const parseJobId = (jobId: string): ParsedJobId => {
30
+ const [kind, projectId, ...rest] = jobId.split(JOB_SEPARATOR)
31
+ // A suffix may carry the separator back if one ever ends up in a card or run id, so the tail is
32
+ // rejoined rather than taken as its first segment.
33
+ const suffix = rest.length > 0 ? rest.join(JOB_SEPARATOR) : undefined
34
+
35
+ return {
36
+ kind: kind as ConnectJobKind,
37
+ projectId: projectId ?? '',
38
+ ...(suffix != null ? { suffix } : {}),
39
+ }
40
+ }
@@ -10,8 +10,7 @@ import type {
10
10
  ConnectModifyBody, ConnectOpSubmission, ConnectPipelineParams, ConnectPipelineResumeBody,
11
11
  ConnectPipelineState, ConnectProjectLlmBody, ConnectProjectSettings, ConnectProjectStatus,
12
12
  ConnectProjectSummary, ConnectSessionOpen, ConnectSessionParams, ConnectSessionView,
13
- ConnectStoryBody, ConnectStoryDeletion, ConnectStoryItem, ConnectStoryList, ConnectStoryMutation,
14
- ConnectStoryQuery, ConnectWaitQuery, ConversionStatusView, ConvertCheck,
13
+ ConnectWaitQuery, ConversionStatusView, ConvertCheck,
15
14
  } from './types.js'
16
15
 
17
16
  type ConnectReference<Request extends RequestShape, Response> =
@@ -47,16 +46,6 @@ export interface ConnectReferences {
47
46
  }, ConnectProjectSettings>
48
47
  job: ConnectReference<{ params: ConnectJobParams, query: ConnectWaitQuery }, ConnectJob>
49
48
  }
50
- story: {
51
- list: ConnectReference<{ params: { id: string }, query: ConnectStoryQuery }, ConnectStoryList>
52
- get: ConnectReference<{ params: { id: string, storyId: string } }, ConnectStoryItem>
53
- create: ConnectReference<{ params: { id: string }, body: ConnectStoryBody }, ConnectStoryMutation>
54
- update: ConnectReference<{
55
- params: { id: string, storyId: string }, body: ConnectStoryBody
56
- }, ConnectStoryMutation>
57
- delete: ConnectReference<{ params: { id: string, storyId: string } }, ConnectStoryDeletion>
58
- develop: ConnectReference<{ params: { id: string, storyId: string } }, ConnectJob>
59
- }
60
49
  files: {
61
50
  list: ConnectReference<{ params: { id: string } }, string[]>
62
51
  }
@@ -139,16 +128,6 @@ export const connectRef: ConnectReferences = {
139
128
  params: { id: string, inquiryId: string }, body: ConnectInquiryAnswerBody
140
129
  }, unknown>(connect.inquiry.answer),
141
130
  },
142
- story: {
143
- list: entrypointRef<{ params: { id: string }, query: ConnectStoryQuery }, ConnectStoryList>(connect.story.list),
144
- get: entrypointRef<{ params: { id: string, storyId: string } }, ConnectStoryItem>(connect.story.get),
145
- create: entrypointRef<{ params: { id: string }, body: ConnectStoryBody }, ConnectStoryMutation>(connect.story.create),
146
- update: entrypointRef<{
147
- params: { id: string, storyId: string }, body: ConnectStoryBody
148
- }, ConnectStoryMutation>(connect.story.update),
149
- delete: entrypointRef<{ params: { id: string, storyId: string } }, ConnectStoryDeletion>(connect.story.delete),
150
- develop: entrypointRef<{ params: { id: string, storyId: string } }, ConnectJob>(connect.story.develop),
151
- },
152
131
  files: {
153
132
  list: entrypointRef<{ params: { id: string } }, string[]>(connect.files.list),
154
133
  },
@@ -9,7 +9,7 @@ import type {
9
9
  ConnectAttachBody, ConnectConfirmBody, ConnectConvertCreateBody, ConnectConvertProceedBody,
10
10
  ConnectCreateBody, ConnectJobParams, ConnectLlmBody, ConnectModifyBody, ConnectPipelineParams,
11
11
  ConnectPipelineResumeBody, ConnectProjectLlmBody, ConnectSession, ConnectSessionOpen,
12
- ConnectSessionParams, ConnectStoryBody, ConnectStoryQuery, ConnectWaitQuery
12
+ ConnectSessionParams, ConnectWaitQuery
13
13
  } from './types.js'
14
14
 
15
15
  /**
@@ -26,7 +26,6 @@ import type {
26
26
  */
27
27
 
28
28
  const idValue = { type: 'string', minLength: 1, maxLength: 128 } as const
29
- const textValue = { type: 'string', minLength: 1, maxLength: 65536 } as const
30
29
 
31
30
  export const ConnectCapabilitiesSchema = {
32
31
  type: 'object',
@@ -156,13 +155,6 @@ export const ConnectProjectIdSchema = {
156
155
  additionalProperties: false,
157
156
  } as JSONSchemaType<{ id: string }>
158
157
 
159
- export const ConnectStoryParamsSchema = {
160
- type: 'object',
161
- properties: { id: idValue, storyId: idValue },
162
- required: ['id', 'storyId'],
163
- additionalProperties: false,
164
- } as JSONSchemaType<{ id: string, storyId: string }>
165
-
166
158
  export const ConnectOpParamsSchema = {
167
159
  type: 'object',
168
160
  properties: { sessionId: idValue, opId: idValue },
@@ -177,19 +169,6 @@ export const ConnectJobParamsSchema = {
177
169
  additionalProperties: false,
178
170
  } as JSONSchemaType<ConnectJobParams>
179
171
 
180
- export const ConnectStoryQuerySchema = {
181
- type: 'object',
182
- properties: {
183
- page: { type: 'integer', minimum: 0, nullable: true },
184
- size: { type: 'integer', minimum: 1, maximum: 100, nullable: true },
185
- status: { type: 'string', maxLength: 32, nullable: true },
186
- area: { type: 'string', maxLength: 32, nullable: true },
187
- q: { type: 'string', maxLength: 256, nullable: true },
188
- },
189
- required: [],
190
- additionalProperties: false,
191
- } as JSONSchemaType<ConnectStoryQuery>
192
-
193
172
  export const ConnectCreateBodySchema = {
194
173
  type: 'object',
195
174
  properties: {
@@ -207,6 +186,7 @@ export const ConnectConfirmBodySchema = {
207
186
  description: { type: 'string', maxLength: 16384, nullable: true },
208
187
  specification: { type: 'string', maxLength: 262144, nullable: true },
209
188
  vision: { type: 'string', maxLength: 16384, nullable: true },
189
+ designSystem: { type: 'string', maxLength: 262144, nullable: true },
210
190
  target: { type: 'string', enum: [...Object.values(ConnectTarget), null], nullable: true },
211
191
  },
212
192
  required: [],
@@ -220,13 +200,6 @@ export const ConnectModifyBodySchema = {
220
200
  additionalProperties: false,
221
201
  } as JSONSchemaType<ConnectModifyBody>
222
202
 
223
- export const ConnectStoryBodySchema = {
224
- type: 'object',
225
- properties: { story: textValue },
226
- required: ['story'],
227
- additionalProperties: false,
228
- } as JSONSchemaType<ConnectStoryBody>
229
-
230
203
  export const ConnectAttachBodySchema = {
231
204
  type: 'object',
232
205
  properties: {