@stream44.studio/t44 0.4.0-rc.24

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 (99) hide show
  1. package/.dco-signatures +9 -0
  2. package/.github/workflows/dco.yaml +12 -0
  3. package/.github/workflows/gordian-open-integrity.yaml +13 -0
  4. package/.github/workflows/test.yaml +31 -0
  5. package/.o/GordianOpenIntegrity-CurrentLifehash.svg +1026 -0
  6. package/.o/GordianOpenIntegrity-InceptionLifehash.svg +1026 -0
  7. package/.o/GordianOpenIntegrity.yaml +21 -0
  8. package/.o/assets/Hero-Terminal44-v0.jpeg +0 -0
  9. package/.o/stream44.studio/assets/Icon-v1.svg +1170 -0
  10. package/.repo-identifier +1 -0
  11. package/DCO.md +34 -0
  12. package/LICENSE.txt +186 -0
  13. package/README.md +189 -0
  14. package/bin/activate +36 -0
  15. package/bin/activate.ts +30 -0
  16. package/bin/postinstall.sh +19 -0
  17. package/bin/shell +27 -0
  18. package/bin/t44 +27 -0
  19. package/caps/ConfigSchemaStruct.ts +55 -0
  20. package/caps/Home.ts +57 -0
  21. package/caps/HomeRegistry.ts +319 -0
  22. package/caps/HomeRegistryFile.ts +144 -0
  23. package/caps/JsonSchemas.ts +220 -0
  24. package/caps/OpenApiSchema.ts +67 -0
  25. package/caps/PackageDescriptor.ts +88 -0
  26. package/caps/ProjectCatalogs.ts +153 -0
  27. package/caps/ProjectDeployment.ts +426 -0
  28. package/caps/ProjectDevelopment.ts +257 -0
  29. package/caps/ProjectPublishing.ts +654 -0
  30. package/caps/ProjectPulling.ts +234 -0
  31. package/caps/ProjectRack.ts +155 -0
  32. package/caps/ProjectRepository.ts +332 -0
  33. package/caps/ProjectTest.ts +251 -0
  34. package/caps/ProjectTestLib.ts +257 -0
  35. package/caps/RootKey.ts +219 -0
  36. package/caps/SigningKey.ts +243 -0
  37. package/caps/TaskWorkflow.ts +192 -0
  38. package/caps/WorkspaceCli.ts +448 -0
  39. package/caps/WorkspaceConfig.ts +268 -0
  40. package/caps/WorkspaceConfig.yaml +87 -0
  41. package/caps/WorkspaceConfigFile.ts +902 -0
  42. package/caps/WorkspaceConnection.ts +329 -0
  43. package/caps/WorkspaceEntityConfig.ts +78 -0
  44. package/caps/WorkspaceEntityConfig.v0.ts +77 -0
  45. package/caps/WorkspaceEntityFact.ts +218 -0
  46. package/caps/WorkspaceInfo.ts +619 -0
  47. package/caps/WorkspaceInit.ts +30 -0
  48. package/caps/WorkspaceKey.ts +338 -0
  49. package/caps/WorkspaceModel.ts +373 -0
  50. package/caps/WorkspaceProjects.ts +636 -0
  51. package/caps/WorkspacePrompt.ts +430 -0
  52. package/caps/WorkspaceShell.sh +39 -0
  53. package/caps/WorkspaceShell.ts +104 -0
  54. package/caps/WorkspaceShell.yaml +64 -0
  55. package/caps/WorkspaceShellCli.ts +109 -0
  56. package/caps/patterns/README.md +2 -0
  57. package/caps/patterns/git-scm.com/ProjectPublishing.ts +507 -0
  58. package/caps/patterns/semver.org/ProjectPublishing.ts +458 -0
  59. package/docs/Overview.drawio +248 -0
  60. package/docs/Overview.svg +4 -0
  61. package/examples/01-Lifecycle/main.test.ts +223 -0
  62. package/lib/crypto.ts +53 -0
  63. package/lib/key.ts +381 -0
  64. package/lib/schema-console-renderer.ts +181 -0
  65. package/lib/schema-resolver.ts +349 -0
  66. package/lib/ucan.ts +137 -0
  67. package/package.json +91 -0
  68. package/standalone-rt.test.ts +150 -0
  69. package/standalone-rt.ts +140 -0
  70. package/structs/HomeRegistry.ts +55 -0
  71. package/structs/HomeRegistryConfig.ts +60 -0
  72. package/structs/ProjectCatalogsConfig.ts +53 -0
  73. package/structs/ProjectDeploymentConfig.ts +56 -0
  74. package/structs/ProjectDeploymentFact.ts +106 -0
  75. package/structs/ProjectPublishingConfig.ts +78 -0
  76. package/structs/ProjectPublishingFact.ts +68 -0
  77. package/structs/ProjectPullingConfig.ts +52 -0
  78. package/structs/ProjectRack.ts +51 -0
  79. package/structs/ProjectRackConfig.ts +56 -0
  80. package/structs/RepositoryOriginDescriptor.ts +51 -0
  81. package/structs/RootKeyConfig.ts +64 -0
  82. package/structs/SigningKeyConfig.ts +64 -0
  83. package/structs/Workspace.ts +56 -0
  84. package/structs/WorkspaceCatalogs.ts +56 -0
  85. package/structs/WorkspaceCliConfig.ts +53 -0
  86. package/structs/WorkspaceConfig.ts +64 -0
  87. package/structs/WorkspaceConfigFile.ts +50 -0
  88. package/structs/WorkspaceConfigFileMeta.ts +70 -0
  89. package/structs/WorkspaceKey.ts +55 -0
  90. package/structs/WorkspaceKeyConfig.ts +56 -0
  91. package/structs/WorkspaceMappingsConfig.ts +56 -0
  92. package/structs/WorkspaceProject.ts +104 -0
  93. package/structs/WorkspaceProjectsConfig.ts +67 -0
  94. package/structs/WorkspaceShellConfig.ts +83 -0
  95. package/structs/patterns/README.md +2 -0
  96. package/structs/patterns/git-scm.com/ProjectPublishingFact.ts +46 -0
  97. package/tsconfig.json +33 -0
  98. package/workspace-rt.ts +152 -0
  99. package/workspace.yaml +3 -0
@@ -0,0 +1,56 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ description: {
17
+ type: 'string',
18
+ description: 'Description of the catalog.'
19
+ },
20
+ repositories: {
21
+ type: 'object',
22
+ additionalProperties: true,
23
+ description: 'Map of repository identifiers to their configurations.'
24
+ },
25
+ createdAt: {
26
+ type: 'string',
27
+ format: 'date-time',
28
+ description: 'ISO 8601 timestamp of when the catalog was created.'
29
+ },
30
+ updatedAt: {
31
+ type: 'string',
32
+ format: 'date-time',
33
+ description: 'ISO 8601 timestamp of when the catalog was last updated.'
34
+ }
35
+ },
36
+ additionalProperties: true,
37
+ description: 'A project catalog entry in the home registry.'
38
+ }
39
+ }
40
+ }
41
+ },
42
+ '#': {
43
+ capsuleName: {
44
+ type: CapsulePropertyTypes.Literal,
45
+ value: capsule['#']
46
+ },
47
+ }
48
+ }
49
+ }, {
50
+ extendsCapsule: '@stream44.studio/t44/caps/HomeRegistryFile',
51
+ importMeta: import.meta,
52
+ importStack: makeImportStack(),
53
+ capsuleName: capsule['#'],
54
+ })
55
+ }
56
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceCatalogs'
@@ -0,0 +1,53 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ javascript: {
17
+ type: 'object',
18
+ additionalProperties: true,
19
+ description: 'JavaScript runtime configuration for the CLI.'
20
+ },
21
+ createdAt: {
22
+ type: 'string',
23
+ format: 'date-time',
24
+ description: 'ISO 8601 timestamp of when the entity config was created.'
25
+ },
26
+ updatedAt: {
27
+ type: 'string',
28
+ format: 'date-time',
29
+ description: 'ISO 8601 timestamp of when the entity config was last updated.'
30
+ }
31
+ },
32
+ required: ['createdAt'],
33
+ additionalProperties: true,
34
+ description: 'Workspace CLI configuration including runtime settings.'
35
+ }
36
+ }
37
+ }
38
+ },
39
+ '#': {
40
+ capsuleName: {
41
+ type: CapsulePropertyTypes.Literal,
42
+ value: capsule['#']
43
+ },
44
+ }
45
+ }
46
+ }, {
47
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityConfig',
48
+ importMeta: import.meta,
49
+ importStack: makeImportStack(),
50
+ capsuleName: capsule['#'],
51
+ })
52
+ }
53
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceCliConfig'
@@ -0,0 +1,64 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ identifier: {
17
+ type: 'string',
18
+ description: 'DID (Decentralized Identifier) of the workspace.'
19
+ },
20
+ rootDir: {
21
+ type: 'string',
22
+ description: 'Absolute path to the workspace root directory.'
23
+ },
24
+ rootConfigFilepath: {
25
+ type: 'string',
26
+ description: 'Relative path to the workspace config file.'
27
+ },
28
+ name: {
29
+ type: 'string',
30
+ description: 'Name of the workspace.'
31
+ },
32
+ createdAt: {
33
+ type: 'string',
34
+ format: 'date-time',
35
+ description: 'ISO 8601 timestamp of when the entity config was created.'
36
+ },
37
+ updatedAt: {
38
+ type: 'string',
39
+ format: 'date-time',
40
+ description: 'ISO 8601 timestamp of when the entity config was last updated.'
41
+ }
42
+ },
43
+ required: ['createdAt', 'updatedAt'],
44
+ additionalProperties: false,
45
+ description: 'Core workspace configuration including identity and location.'
46
+ }
47
+ }
48
+ }
49
+ },
50
+ '#': {
51
+ capsuleName: {
52
+ type: CapsulePropertyTypes.Literal,
53
+ value: capsule['#']
54
+ },
55
+ }
56
+ }
57
+ }, {
58
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityConfig',
59
+ importMeta: import.meta,
60
+ importStack: makeImportStack(),
61
+ capsuleName: capsule['#'],
62
+ })
63
+ }
64
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceConfig'
@@ -0,0 +1,50 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ extends: {
17
+ type: 'array',
18
+ items: {
19
+ type: 'string'
20
+ },
21
+ description: 'List of config file paths to extend from. Supports relative paths and npm package paths.'
22
+ }
23
+ },
24
+ additionalProperties: true,
25
+ patternProperties: {
26
+ '^#': {
27
+ type: 'object',
28
+ description: 'Workspace config entity keyed by struct capsule name prefixed with #'
29
+ }
30
+ },
31
+ description: 'A workspace configuration file that can extend other config files and contains workspace config entities.'
32
+ }
33
+ }
34
+ }
35
+ },
36
+ '#': {
37
+ capsuleName: {
38
+ type: CapsulePropertyTypes.Literal,
39
+ value: capsule['#']
40
+ },
41
+ }
42
+ }
43
+ }, {
44
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceConfigFile',
45
+ importMeta: import.meta,
46
+ importStack: makeImportStack(),
47
+ capsuleName: capsule['#'],
48
+ })
49
+ }
50
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceConfigFile'
@@ -0,0 +1,70 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ filePath: {
17
+ type: 'string',
18
+ description: 'Absolute path to the workspace config file.'
19
+ },
20
+ relPath: {
21
+ type: 'string',
22
+ description: 'Relative path to the workspace config file from workspace root.'
23
+ },
24
+ entities: {
25
+ type: 'object',
26
+ additionalProperties: {
27
+ type: 'object',
28
+ properties: {
29
+ line: {
30
+ type: 'integer',
31
+ description: 'Line number where the entity is defined.'
32
+ },
33
+ data: {
34
+ type: 'object',
35
+ additionalProperties: true,
36
+ description: 'Entity data.'
37
+ }
38
+ },
39
+ required: ['line', 'data']
40
+ },
41
+ description: 'Map of entity keys (e.g., #WorkspaceConfig) to their line numbers and data.'
42
+ },
43
+ updatedAt: {
44
+ type: 'string',
45
+ format: 'date-time',
46
+ description: 'ISO 8601 timestamp of when this metadata was last updated.'
47
+ }
48
+ },
49
+ required: ['filePath', 'relPath', 'entities', 'updatedAt'],
50
+ additionalProperties: false,
51
+ description: 'Cached metadata for a workspace config file including entity line numbers.'
52
+ }
53
+ }
54
+ }
55
+ },
56
+ '#': {
57
+ capsuleName: {
58
+ type: CapsulePropertyTypes.Literal,
59
+ value: capsule['#']
60
+ },
61
+ }
62
+ }
63
+ }, {
64
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityFact',
65
+ importMeta: import.meta,
66
+ importStack: makeImportStack(),
67
+ capsuleName: capsule['#'],
68
+ })
69
+ }
70
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceConfigFileMeta'
@@ -0,0 +1,55 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ did: {
17
+ type: 'string',
18
+ description: 'The DID (Decentralized Identifier) of the workspace key.'
19
+ },
20
+ encryptedPrivateKey: {
21
+ type: 'string',
22
+ description: 'The private key encrypted with a passphrase derived from the root key.'
23
+ },
24
+ privateKey: {
25
+ type: 'string',
26
+ description: 'Legacy unencrypted private key. Migrated to encryptedPrivateKey on first access.'
27
+ },
28
+ createdAt: {
29
+ type: 'string',
30
+ format: 'date-time',
31
+ description: 'ISO 8601 timestamp of when the workspace key was created.'
32
+ }
33
+ },
34
+ required: ['did', 'createdAt'],
35
+ additionalProperties: false,
36
+ description: 'A workspace signing key identity.'
37
+ }
38
+ }
39
+ }
40
+ },
41
+ '#': {
42
+ capsuleName: {
43
+ type: CapsulePropertyTypes.Literal,
44
+ value: capsule['#']
45
+ },
46
+ }
47
+ }
48
+ }, {
49
+ extendsCapsule: '@stream44.studio/t44/caps/HomeRegistryFile',
50
+ importMeta: import.meta,
51
+ importStack: makeImportStack(),
52
+ capsuleName: capsule['#'],
53
+ })
54
+ }
55
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceKey'
@@ -0,0 +1,56 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ name: {
17
+ type: 'string',
18
+ description: 'Name of the workspace key.'
19
+ },
20
+ identifier: {
21
+ type: 'string',
22
+ description: 'DID (Decentralized Identifier) of the workspace key.'
23
+ },
24
+ createdAt: {
25
+ type: 'string',
26
+ format: 'date-time',
27
+ description: 'ISO 8601 timestamp of when the entity config was created.'
28
+ },
29
+ updatedAt: {
30
+ type: 'string',
31
+ format: 'date-time',
32
+ description: 'ISO 8601 timestamp of when the entity config was last updated.'
33
+ }
34
+ },
35
+ required: ['createdAt', 'updatedAt'],
36
+ additionalProperties: false,
37
+ description: 'Workspace key identity configuration.'
38
+ }
39
+ }
40
+ }
41
+ },
42
+ '#': {
43
+ capsuleName: {
44
+ type: CapsulePropertyTypes.Literal,
45
+ value: capsule['#']
46
+ },
47
+ }
48
+ }
49
+ }, {
50
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityConfig',
51
+ importMeta: import.meta,
52
+ importStack: makeImportStack(),
53
+ capsuleName: capsule['#'],
54
+ })
55
+ }
56
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceKeyConfig'
@@ -0,0 +1,56 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ mappings: {
17
+ type: 'object',
18
+ additionalProperties: {
19
+ type: 'object',
20
+ additionalProperties: true
21
+ },
22
+ description: 'Map of capsule names to their provider-specific mappings.'
23
+ },
24
+ createdAt: {
25
+ type: 'string',
26
+ format: 'date-time',
27
+ description: 'ISO 8601 timestamp of when the entity config was created.'
28
+ },
29
+ updatedAt: {
30
+ type: 'string',
31
+ format: 'date-time',
32
+ description: 'ISO 8601 timestamp of when the entity config was last updated.'
33
+ }
34
+ },
35
+ required: ['createdAt', 'updatedAt'],
36
+ additionalProperties: false,
37
+ description: 'Workspace mappings configuration for provider-specific name resolution.'
38
+ }
39
+ }
40
+ }
41
+ },
42
+ '#': {
43
+ capsuleName: {
44
+ type: CapsulePropertyTypes.Literal,
45
+ value: capsule['#']
46
+ },
47
+ }
48
+ }
49
+ }, {
50
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityConfig',
51
+ importMeta: import.meta,
52
+ importStack: makeImportStack(),
53
+ capsuleName: capsule['#'],
54
+ })
55
+ }
56
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceMappingsConfig'
@@ -0,0 +1,104 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ name: {
17
+ type: 'string',
18
+ description: 'Project name (directory name in workspace).'
19
+ },
20
+ sourceDir: {
21
+ type: 'string',
22
+ description: 'Absolute path to the project source directory.'
23
+ },
24
+ git: {
25
+ oneOf: [
26
+ {
27
+ type: 'object',
28
+ properties: {
29
+ firstCommitHash: {
30
+ type: 'string',
31
+ description: 'Hash of the first commit in the repository.'
32
+ },
33
+ createdAt: {
34
+ type: 'string',
35
+ description: 'Date of the first commit.'
36
+ },
37
+ firstCommitAuthor: {
38
+ type: 'object',
39
+ properties: {
40
+ name: { type: 'string' },
41
+ email: { type: 'string' }
42
+ },
43
+ description: 'Author of the first commit.'
44
+ },
45
+ remotes: {
46
+ type: 'object',
47
+ additionalProperties: { type: 'string' },
48
+ description: 'Map of remote names to URLs.'
49
+ }
50
+ },
51
+ additionalProperties: true,
52
+ description: 'Git repository metadata.'
53
+ },
54
+ {
55
+ type: 'boolean',
56
+ const: false,
57
+ description: 'false if not a git repository.'
58
+ }
59
+ ]
60
+ },
61
+ deployments: {
62
+ type: 'object',
63
+ additionalProperties: {
64
+ type: 'object',
65
+ additionalProperties: true
66
+ },
67
+ description: 'Deployment configurations mapped to this project.'
68
+ },
69
+ repositories: {
70
+ type: 'object',
71
+ additionalProperties: {
72
+ type: 'object',
73
+ additionalProperties: true
74
+ },
75
+ description: 'Repository configurations mapped to this project.'
76
+ },
77
+ updatedAt: {
78
+ type: 'string',
79
+ format: 'date-time',
80
+ description: 'ISO 8601 timestamp of when this project data was last updated.'
81
+ }
82
+ },
83
+ required: ['name', 'sourceDir'],
84
+ additionalProperties: true,
85
+ description: 'Cached workspace project data with enriched metadata from git, deployments, and repositories.'
86
+ }
87
+ }
88
+ }
89
+ },
90
+ '#': {
91
+ capsuleName: {
92
+ type: CapsulePropertyTypes.Literal,
93
+ value: capsule['#']
94
+ },
95
+ }
96
+ }
97
+ }, {
98
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityFact',
99
+ importMeta: import.meta,
100
+ importStack: makeImportStack(),
101
+ capsuleName: capsule['#'],
102
+ })
103
+ }
104
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceProject'
@@ -0,0 +1,67 @@
1
+
2
+ export async function capsule({
3
+ encapsulate,
4
+ CapsulePropertyTypes,
5
+ makeImportStack
6
+ }: any) {
7
+ return encapsulate({
8
+ '#@stream44.studio/encapsulate/spine-contracts/CapsuleSpineContract.v0': {
9
+ '#@stream44.studio/t44/caps/ConfigSchemaStruct': {
10
+ as: 'schema',
11
+ options: {
12
+ '#': {
13
+ schema: {
14
+ type: 'object',
15
+ properties: {
16
+ projects: {
17
+ type: 'object',
18
+ additionalProperties: {
19
+ type: 'object',
20
+ properties: {
21
+ sourceDir: {
22
+ type: 'string',
23
+ description: 'Absolute path to the project source directory.'
24
+ },
25
+ git: {
26
+ type: 'object',
27
+ additionalProperties: true,
28
+ description: 'Git repository metadata for the project.'
29
+ }
30
+ },
31
+ additionalProperties: true
32
+ },
33
+ description: 'Map of project names to their configurations.'
34
+ },
35
+ createdAt: {
36
+ type: 'string',
37
+ format: 'date-time',
38
+ description: 'ISO 8601 timestamp of when the entity config was created.'
39
+ },
40
+ updatedAt: {
41
+ type: 'string',
42
+ format: 'date-time',
43
+ description: 'ISO 8601 timestamp of when the entity config was last updated.'
44
+ }
45
+ },
46
+ required: ['createdAt', 'updatedAt'],
47
+ additionalProperties: false,
48
+ description: 'Workspace projects configuration with git metadata.'
49
+ }
50
+ }
51
+ }
52
+ },
53
+ '#': {
54
+ capsuleName: {
55
+ type: CapsulePropertyTypes.Literal,
56
+ value: capsule['#']
57
+ },
58
+ }
59
+ }
60
+ }, {
61
+ extendsCapsule: '@stream44.studio/t44/caps/WorkspaceEntityConfig',
62
+ importMeta: import.meta,
63
+ importStack: makeImportStack(),
64
+ capsuleName: capsule['#'],
65
+ })
66
+ }
67
+ capsule['#'] = '@stream44.studio/t44/structs/WorkspaceProjectsConfig'