@vfarcic/dot-ai 0.116.0 → 0.118.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.
Files changed (133) hide show
  1. package/README.md +91 -137
  2. package/dist/core/ai-provider-factory.d.ts +4 -2
  3. package/dist/core/ai-provider-factory.d.ts.map +1 -1
  4. package/dist/core/ai-provider-factory.js +17 -6
  5. package/dist/core/capability-operations.js +1 -1
  6. package/dist/core/generic-session-manager.d.ts +67 -0
  7. package/dist/core/generic-session-manager.d.ts.map +1 -0
  8. package/dist/core/generic-session-manager.js +192 -0
  9. package/dist/core/pattern-operations.js +1 -1
  10. package/dist/core/providers/noop-provider.d.ts +47 -0
  11. package/dist/core/providers/noop-provider.d.ts.map +1 -0
  12. package/dist/core/providers/noop-provider.js +63 -0
  13. package/dist/core/schema.d.ts.map +1 -1
  14. package/dist/core/schema.js +13 -13
  15. package/dist/core/session-utils.d.ts +3 -6
  16. package/dist/core/session-utils.d.ts.map +1 -1
  17. package/dist/core/session-utils.js +5 -13
  18. package/dist/core/shared-prompt-loader.d.ts +15 -3
  19. package/dist/core/shared-prompt-loader.d.ts.map +1 -1
  20. package/dist/core/shared-prompt-loader.js +67 -14
  21. package/dist/core/unified-creation-session.d.ts +3 -10
  22. package/dist/core/unified-creation-session.d.ts.map +1 -1
  23. package/dist/core/unified-creation-session.js +34 -75
  24. package/dist/core/unified-creation-types.d.ts +31 -22
  25. package/dist/core/unified-creation-types.d.ts.map +1 -1
  26. package/dist/interfaces/mcp.d.ts.map +1 -1
  27. package/dist/interfaces/mcp.js +9 -34
  28. package/dist/tools/answer-question.d.ts.map +1 -1
  29. package/dist/tools/answer-question.js +12 -12
  30. package/dist/tools/choose-solution.js +1 -1
  31. package/dist/tools/generate-manifests.d.ts.map +1 -1
  32. package/dist/tools/generate-manifests.js +9 -10
  33. package/dist/tools/index.d.ts +1 -1
  34. package/dist/tools/index.d.ts.map +1 -1
  35. package/dist/tools/index.js +6 -6
  36. package/dist/tools/organizational-data.js +12 -12
  37. package/dist/tools/project-setup/discovery.d.ts +15 -0
  38. package/dist/tools/project-setup/discovery.d.ts.map +1 -0
  39. package/dist/tools/project-setup/discovery.js +104 -0
  40. package/dist/tools/project-setup/generate-scope.d.ts +15 -0
  41. package/dist/tools/project-setup/generate-scope.d.ts.map +1 -0
  42. package/dist/tools/project-setup/generate-scope.js +237 -0
  43. package/dist/tools/project-setup/report-scan.d.ts +15 -0
  44. package/dist/tools/project-setup/report-scan.d.ts.map +1 -0
  45. package/dist/tools/project-setup/report-scan.js +156 -0
  46. package/dist/tools/project-setup/types.d.ts +111 -0
  47. package/dist/tools/project-setup/types.d.ts.map +1 -0
  48. package/dist/tools/project-setup/types.js +8 -0
  49. package/dist/tools/project-setup.d.ts +28 -0
  50. package/dist/tools/project-setup.d.ts.map +1 -0
  51. package/dist/tools/project-setup.js +134 -0
  52. package/dist/tools/recommend.js +1 -1
  53. package/dist/tools/remediate.js +1 -1
  54. package/dist/tools/version.d.ts +0 -7
  55. package/dist/tools/version.d.ts.map +1 -1
  56. package/dist/tools/version.js +5 -34
  57. package/package.json +4 -2
  58. package/prompts/capability-inference.md +2 -2
  59. package/prompts/infrastructure-trigger-expansion.md +2 -2
  60. package/prompts/intent-analysis.md +2 -2
  61. package/prompts/kyverno-generation.md +14 -14
  62. package/prompts/manifest-generation.md +5 -5
  63. package/prompts/map-intent-to-operation.md +2 -2
  64. package/prompts/pattern-complete-error.md +1 -1
  65. package/prompts/pattern-complete-success.md +4 -4
  66. package/prompts/pattern-rationale.md +1 -1
  67. package/prompts/pattern-resources.md +1 -1
  68. package/prompts/pattern-review.md +5 -5
  69. package/prompts/policy-complete-apply.md +4 -4
  70. package/prompts/policy-complete-discard.md +1 -1
  71. package/prompts/policy-complete-error.md +1 -1
  72. package/prompts/policy-complete-save.md +4 -4
  73. package/prompts/policy-complete-success.md +4 -4
  74. package/prompts/policy-namespace-scope.md +1 -1
  75. package/prompts/question-generation.md +5 -5
  76. package/prompts/resource-analysis.md +3 -3
  77. package/prompts/resource-selection.md +3 -3
  78. package/prompts/solution-enhancement.md +4 -4
  79. package/scripts/anthropic.nu +9 -13
  80. package/scripts/common.nu +31 -33
  81. package/scripts/ingress.nu +5 -4
  82. package/scripts/kubernetes.nu +38 -53
  83. package/shared-prompts/prd-create.md +15 -1
  84. package/shared-prompts/prd-done.md +1 -0
  85. package/shared-prompts/prd-next.md +0 -2
  86. package/shared-prompts/prd-start.md +2 -2
  87. package/dist/core/doc-discovery.d.ts +0 -38
  88. package/dist/core/doc-discovery.d.ts.map +0 -1
  89. package/dist/core/doc-discovery.js +0 -231
  90. package/dist/core/doc-testing-session.d.ts +0 -109
  91. package/dist/core/doc-testing-session.d.ts.map +0 -1
  92. package/dist/core/doc-testing-session.js +0 -696
  93. package/dist/core/doc-testing-types.d.ts +0 -127
  94. package/dist/core/doc-testing-types.d.ts.map +0 -1
  95. package/dist/core/doc-testing-types.js +0 -53
  96. package/dist/core/nushell-runtime.d.ts +0 -39
  97. package/dist/core/nushell-runtime.d.ts.map +0 -1
  98. package/dist/core/nushell-runtime.js +0 -103
  99. package/dist/core/platform-operations.d.ts +0 -70
  100. package/dist/core/platform-operations.d.ts.map +0 -1
  101. package/dist/core/platform-operations.js +0 -294
  102. package/dist/tools/build-platform.d.ts +0 -25
  103. package/dist/tools/build-platform.d.ts.map +0 -1
  104. package/dist/tools/build-platform.js +0 -277
  105. package/dist/tools/test-docs.d.ts +0 -22
  106. package/dist/tools/test-docs.d.ts.map +0 -1
  107. package/dist/tools/test-docs.js +0 -351
  108. package/prompts/doc-testing-done.md +0 -51
  109. package/prompts/doc-testing-fix.md +0 -120
  110. package/prompts/doc-testing-scan.md +0 -140
  111. package/prompts/doc-testing-test-section.md +0 -169
  112. package/prompts/platform-operations-parse-script-help.md +0 -68
  113. package/scripts/ack.nu +0 -195
  114. package/scripts/argo-workflows.nu +0 -47
  115. package/scripts/argocd.nu +0 -85
  116. package/scripts/aso.nu +0 -74
  117. package/scripts/backstage.nu +0 -349
  118. package/scripts/cert-manager.nu +0 -13
  119. package/scripts/cnpg.nu +0 -14
  120. package/scripts/dot.nu +0 -32
  121. package/scripts/external-secrets.nu +0 -110
  122. package/scripts/gatekeeper.nu +0 -19
  123. package/scripts/github.nu +0 -42
  124. package/scripts/image.nu +0 -67
  125. package/scripts/kro.nu +0 -11
  126. package/scripts/kubevela.nu +0 -22
  127. package/scripts/port.nu +0 -71
  128. package/scripts/prometheus.nu +0 -21
  129. package/scripts/registry.nu +0 -55
  130. package/scripts/storage.nu +0 -210
  131. package/scripts/tests.nu +0 -12
  132. package/scripts/velero.nu +0 -45
  133. package/shared-prompts/validate-docs.md +0 -22
@@ -1,12 +1,12 @@
1
1
  🚀 **Policy Applied Successfully!**
2
2
 
3
- **Description**: {description}
4
- **Triggers**: {triggers}
5
- **Rationale**: {rationale}
3
+ **Description**: {{description}}
4
+ **Triggers**: {{triggers}}
5
+ **Rationale**: {{rationale}}
6
6
 
7
7
  **Applied Kyverno Policy:**
8
8
  ```yaml
9
- {kyvernoPolicy}
9
+ {{kyvernoPolicy}}
10
10
  ```
11
11
 
12
12
  The policy intent has been saved and the Kyverno policy has been applied to your cluster. The policy is now active and will enforce the defined rules on new and updated resources.
@@ -1,5 +1,5 @@
1
1
  ❌ **Policy Creation Cancelled**
2
2
 
3
- **Description**: {description}
3
+ **Description**: {{description}}
4
4
 
5
5
  The policy intent creation has been cancelled and no data has been stored.
@@ -1 +1 @@
1
- Error creating policy intent: {error}
1
+ Error creating policy intent: {{error}}
@@ -1,12 +1,12 @@
1
1
  💾 **Policy Saved Successfully!**
2
2
 
3
- **Description**: {description}
4
- **Triggers**: {triggers}
5
- **Rationale**: {rationale}
3
+ **Description**: {{description}}
4
+ **Triggers**: {{triggers}}
5
+ **Rationale**: {{rationale}}
6
6
 
7
7
  **Generated Kyverno Policy:**
8
8
  ```yaml
9
- {kyvernoPolicy}
9
+ {{kyvernoPolicy}}
10
10
  ```
11
11
 
12
12
  The policy intent has been saved and the Kyverno YAML should be saved to your local file system. The policy is ready for manual deployment when needed.
@@ -1,7 +1,7 @@
1
1
  ✅ **Policy Intent Created Successfully!**
2
2
 
3
- **Description**: {description}
4
- **Triggers**: {triggers}
5
- **Rationale**: {rationale}
3
+ **Description**: {{description}}
4
+ **Triggers**: {{triggers}}
5
+ **Rationale**: {{rationale}}
6
6
 
7
- **Action**: {deploymentAction}
7
+ **Action**: {{deploymentAction}}
@@ -3,7 +3,7 @@
3
3
  Your policy can be applied cluster-wide or limited to specific namespaces.
4
4
 
5
5
  ## Available Namespaces in Your Cluster:
6
- {namespaces}
6
+ {{namespaces}}
7
7
 
8
8
  ## Choose the scope for your policy:
9
9
 
@@ -1,19 +1,19 @@
1
1
  # Question Generation for Kubernetes Resource Configuration
2
2
 
3
3
  ## User Intent
4
- {intent}
4
+ {{intent}}
5
5
 
6
6
  ## Recommended Solution
7
- {solution_description}
7
+ {{solution_description}}
8
8
 
9
9
  ## Resources in Solution
10
- {resource_details}
10
+ {{resource_details}}
11
11
 
12
12
  ## Available Cluster Options
13
- {cluster_options}
13
+ {{cluster_options}}
14
14
 
15
15
  ## Organizational Policies
16
- {policy_context}
16
+ {{policy_context}}
17
17
 
18
18
  ## Instructions
19
19
 
@@ -1,13 +1,13 @@
1
1
  # Resource Analysis for Enhancement
2
2
 
3
3
  ## Current Solution
4
- {current_solution}
4
+ {{current_solution}}
5
5
 
6
6
  ## User Request
7
- {user_request}
7
+ {{user_request}}
8
8
 
9
9
  ## Available Resource Types
10
- {available_resource_types}
10
+ {{available_resource_types}}
11
11
 
12
12
  ## Instructions
13
13
 
@@ -3,13 +3,13 @@
3
3
  You are a Kubernetes expert. Given this user intent, available resources, and organizational patterns, create and rank complete solutions that address the user's needs.
4
4
 
5
5
  ## User Intent
6
- {intent}
6
+ {{intent}}
7
7
 
8
8
  ## Available Resources
9
- {resources}
9
+ {{{resources}}}
10
10
 
11
11
  ## Organizational Patterns
12
- {patterns}
12
+ {{patterns}}
13
13
 
14
14
  ## Instructions
15
15
 
@@ -1,16 +1,16 @@
1
1
  # Single-Pass Solution Enhancement
2
2
 
3
3
  ## Current Solution
4
- {current_solution}
4
+ {{current_solution}}
5
5
 
6
6
  ## Detailed Resource Schemas
7
- {detailed_schemas}
7
+ {{detailed_schemas}}
8
8
 
9
9
  ## Analysis Result
10
- {analysis_result}
10
+ {{analysis_result}}
11
11
 
12
12
  ## User Response
13
- {open_response}
13
+ {{open_response}}
14
14
 
15
15
  ## Instructions
16
16
 
@@ -2,23 +2,19 @@
2
2
 
3
3
  # Retrieves Anthropic token
4
4
  #
5
- # Parameters:
6
- # --anthropic-api-key: Anthropic API key (optional, falls back to ANTHROPIC_API_KEY env var)
7
- #
8
5
  # Returns:
9
6
  # A record with token, and saves values to .env file
10
- def --env "main get anthropic" [
11
- --anthropic-api-key: string
12
- ] {
7
+ def --env "main get anthropic" [] {
13
8
 
14
- mut key = $anthropic_api_key
15
- if ($key | is-empty) and ("ANTHROPIC_API_KEY" in $env) {
16
- $key = $env.ANTHROPIC_API_KEY
17
- } else if ($key | is-empty) {
18
- error make { msg: "Anthropic API key required via --anthropic-api-key parameter or ANTHROPIC_API_KEY environment variable" }
9
+ mut anthropic_api_key = ""
10
+ if "ANTHROPIC_API_KEY" in $env {
11
+ $anthropic_api_key = $env.ANTHROPIC_API_KEY
12
+ } else {
13
+ let value = input $"(ansi green_bold)Enter Anthropic token:(ansi reset) "
14
+ $anthropic_api_key = $value
19
15
  }
20
- $"export ANTHROPIC_API_KEY=($key)\n" | save --append .env
16
+ $"export ANTHROPIC_API_KEY=($anthropic_api_key)\n" | save --append .env
21
17
 
22
- {token: $key}
18
+ {token: $anthropic_api_key}
23
19
 
24
20
  }
package/scripts/common.nu CHANGED
@@ -47,10 +47,6 @@ def "main delete temp_files" [] {
47
47
  # > main get creds azure
48
48
  def --env "main get creds" [
49
49
  provider: string, # The cloud provider to configure credentials for (aws, azure, google)
50
- --aws-access-key-id: string, # AWS Access Key ID (optional, falls back to AWS_ACCESS_KEY_ID env var)
51
- --aws-secret-access-key: string, # AWS Secret Access Key (optional, falls back to AWS_SECRET_ACCESS_KEY env var)
52
- --aws-account-id: string, # AWS Account ID (optional, falls back to AWS_ACCOUNT_ID env var)
53
- --azure-tenant: string # Azure Tenant ID (optional, falls back to AZURE_TENANT env var)
54
50
  ] {
55
51
 
56
52
  mut creds = {provider: $provider}
@@ -62,47 +58,49 @@ def --env "main get creds" [
62
58
 
63
59
  } else if $provider == "aws" {
64
60
 
65
- mut access_key = $aws_access_key_id
66
- if ($access_key | is-empty) and ("AWS_ACCESS_KEY_ID" in $env) {
67
- $access_key = $env.AWS_ACCESS_KEY_ID
68
- } else if ($access_key | is-empty) {
69
- error make { msg: "AWS Access Key ID required via --aws-access-key-id parameter or AWS_ACCESS_KEY_ID environment variable" }
61
+ mut aws_access_key_id = ""
62
+ if AWS_ACCESS_KEY_ID in $env {
63
+ $aws_access_key_id = $env.AWS_ACCESS_KEY_ID
64
+ } else {
65
+ $aws_access_key_id = input $"(ansi green_bold)Enter AWS Access Key ID: (ansi reset)"
70
66
  }
71
- $"export AWS_ACCESS_KEY_ID=($access_key)\n"
67
+ $"export AWS_ACCESS_KEY_ID=($aws_access_key_id)\n"
72
68
  | save --append .env
73
- $creds = ( $creds | upsert aws_access_key_id $access_key )
74
-
75
- mut secret_key = $aws_secret_access_key
76
- if ($secret_key | is-empty) and ("AWS_SECRET_ACCESS_KEY" in $env) {
77
- $secret_key = $env.AWS_SECRET_ACCESS_KEY
78
- } else if ($secret_key | is-empty) {
79
- error make { msg: "AWS Secret Access Key required via --aws-secret-access-key parameter or AWS_SECRET_ACCESS_KEY environment variable" }
69
+ $creds = ( $creds | upsert aws_access_key_id $aws_access_key_id )
70
+
71
+ mut aws_secret_access_key = ""
72
+ if AWS_SECRET_ACCESS_KEY in $env {
73
+ $aws_secret_access_key = $env.AWS_SECRET_ACCESS_KEY
74
+ } else {
75
+ $aws_secret_access_key = input $"(ansi green_bold)Enter AWS Secret Access Key: (ansi reset)" --suppress-output
76
+ print ""
80
77
  }
81
- $"export AWS_SECRET_ACCESS_KEY=($secret_key)\n"
78
+ $"export AWS_SECRET_ACCESS_KEY=($aws_secret_access_key)\n"
82
79
  | save --append .env
83
- $creds = ( $creds | upsert aws_secret_access_key $secret_key )
80
+ $creds = ( $creds | upsert aws_secret_access_key $aws_secret_access_key )
84
81
 
85
- mut account_id = $aws_account_id
86
- if ($account_id | is-empty) and ("AWS_ACCOUNT_ID" in $env) {
87
- $account_id = $env.AWS_ACCOUNT_ID
88
- } else if ($account_id | is-empty) {
89
- error make { msg: "AWS Account ID required via --aws-account-id parameter or AWS_ACCOUNT_ID environment variable" }
82
+ mut aws_account_id = ""
83
+ if AWS_ACCOUNT_ID in $env {
84
+ $aws_account_id = $env.AWS_ACCOUNT_ID
85
+ } else {
86
+ $aws_account_id = input $"(ansi green_bold)Enter AWS Account ID: (ansi reset)"
90
87
  }
91
- $"export AWS_ACCOUNT_ID=($account_id)\n"
88
+ $"export AWS_ACCOUNT_ID=($aws_account_id)\n"
92
89
  | save --append .env
93
- $creds = ( $creds | upsert aws_account_id $account_id )
90
+ $creds = ( $creds | upsert aws_account_id $aws_account_id )
94
91
 
95
92
  } else if $provider == "azure" {
96
93
 
97
- mut tenant = $azure_tenant
98
- if ($tenant | is-empty) and ("AZURE_TENANT" in $env) {
99
- $tenant = $env.AZURE_TENANT
100
- } else if ($tenant | is-empty) {
101
- error make { msg: "Azure Tenant ID required via --azure-tenant parameter or AZURE_TENANT environment variable" }
94
+ mut tenant_id = ""
95
+
96
+ if AZURE_TENANT in $env {
97
+ $tenant_id = $env.AZURE_TENANT
98
+ } else {
99
+ $tenant_id = input $"(ansi green_bold)Enter Azure Tenant ID: (ansi reset)"
102
100
  }
103
- $creds = ( $creds | upsert tenant_id $tenant )
101
+ $creds = ( $creds | upsert tenant_id $tenant_id )
104
102
 
105
- az login --tenant $tenant
103
+ az login --tenant $tenant_id
106
104
 
107
105
  } else {
108
106
 
@@ -39,12 +39,13 @@ def --env "main apply ingress" [
39
39
 
40
40
  (
41
41
  kubectl --namespace ingress-nginx wait
42
- --for=condition=Available
43
- deployment ingress-nginx-controller
42
+ --for=condition=Ready
43
+ pods
44
+ --selector app.kubernetes.io/name=ingress-nginx
45
+ --selector app.kubernetes.io/component=controller
46
+ --timeout=120s
44
47
  )
45
48
 
46
- sleep 5sec
47
-
48
49
  }
49
50
 
50
51
  } else {
@@ -13,11 +13,6 @@ def --env "main create kubernetes" [
13
13
  --node-size = "small" # Supported values: small, medium, large
14
14
  --auth = true # Whether to perform authentication with the cloud provider
15
15
  --enable-ingress = true # Whether to enable ingress for the kind provider
16
- --aws-access-key-id: string, # AWS Access Key ID (optional, falls back to AWS_ACCESS_KEY_ID env var)
17
- --aws-secret-access-key: string, # AWS Secret Access Key (optional, falls back to AWS_SECRET_ACCESS_KEY env var)
18
- --azure-tenant: string, # Azure Tenant ID (optional, falls back to AZURE_TENANT env var)
19
- --upcloud-username: string, # UpCloud username (optional, falls back to UPCLOUD_USERNAME env var)
20
- --upcloud-password: string # UpCloud password (optional, falls back to UPCLOUD_PASSWORD env var)
21
16
  ] {
22
17
 
23
18
  $env.KUBECONFIG = $"($env.PWD)/kubeconfig-($name).yaml"
@@ -37,8 +32,6 @@ def --env "main create kubernetes" [
37
32
  (
38
33
  create eks --name $name --node_size $node_size
39
34
  --min_nodes $min_nodes --max_nodes $max_nodes
40
- --aws-access-key-id $aws_access_key_id
41
- --aws-secret-access-key $aws_secret_access_key
42
35
  )
43
36
 
44
37
  } else if $provider == "azure" {
@@ -46,7 +39,6 @@ def --env "main create kubernetes" [
46
39
  (
47
40
  create aks --name $name --node_size $node_size
48
41
  --min_nodes $min_nodes --max_nodes $max_nodes
49
- --azure-tenant $azure_tenant
50
42
  )
51
43
 
52
44
  } else if $provider == "upcloud" {
@@ -54,8 +46,6 @@ def --env "main create kubernetes" [
54
46
  (
55
47
  create upcloud --name $name --node_size $node_size
56
48
  --min_nodes $min_nodes --max_nodes $max_nodes
57
- --upcloud-username $upcloud_username
58
- --upcloud-password $upcloud_password
59
49
  )
60
50
 
61
51
  } else if $provider == "kind" {
@@ -317,8 +307,6 @@ def --env "create upcloud" [
317
307
  --node_size = "small" # Supported values: small, medium, large
318
308
  --min_nodes = 2 # Minimum number of nodes in the cluster
319
309
  --max_nodes = 4 # Maximum number of nodes in the cluster
320
- --upcloud-username: string, # UpCloud username (optional, falls back to UPCLOUD_USERNAME env var)
321
- --upcloud-password: string # UpCloud password (optional, falls back to UPCLOUD_PASSWORD env var)
322
310
  ] {
323
311
 
324
312
  print $"
@@ -329,24 +317,24 @@ Press the (ansi yellow_bold)enter key(ansi reset) to continue.
329
317
  "
330
318
  input
331
319
 
332
- mut username = $upcloud_username
333
- if ($username | is-empty) and ("UPCLOUD_USERNAME" in $env) {
334
- $username = $env.UPCLOUD_USERNAME
335
- } else if ($username | is-empty) {
336
- error make { msg: "UpCloud username required via --upcloud-username parameter or UPCLOUD_USERNAME environment variable" }
320
+ mut upcloud_username = ""
321
+ if UPCLOUD_USERNAME in $env {
322
+ $upcloud_username = $env.UPCLOUD_USERNAME
323
+ } else {
324
+ $upcloud_username = input $"(ansi green_bold)Enter UpCloud username: (ansi reset)"
325
+ $env.UPCLOUD_USERNAME = $upcloud_username
337
326
  }
338
- $env.UPCLOUD_USERNAME = $username
339
- $"export UPCLOUD_USERNAME=($username)\n"
327
+ $"export UPCLOUD_USERNAME=($upcloud_username)\n"
340
328
  | save --append .env
341
-
342
- mut password = $upcloud_password
343
- if ($password | is-empty) and ("UPCLOUD_PASSWORD" in $env) {
344
- $password = $env.UPCLOUD_PASSWORD
345
- } else if ($password | is-empty) {
346
- error make { msg: "UpCloud password required via --upcloud-password parameter or UPCLOUD_PASSWORD environment variable" }
329
+
330
+ mut upcloud_password = ""
331
+ if UPCLOUD_PASSWORD in $env {
332
+ $upcloud_password = $env.UPCLOUD_PASSWORD
333
+ } else {
334
+ $upcloud_password = input $"(ansi green_bold)Enter UpCloud password: (ansi reset)" --suppress-output
335
+ $env.UPCLOUD_PASSWORD = $upcloud_password
347
336
  }
348
- $env.UPCLOUD_PASSWORD = $password
349
- $"export UPCLOUD_PASSWORD=($password)\n"
337
+ $"export UPCLOUD_PASSWORD=($upcloud_password)\n"
350
338
  | save --append .env
351
339
  print ""
352
340
 
@@ -394,22 +382,21 @@ def --env "create aks" [
394
382
  --name = "dot", # Name of the Kubernetes cluster
395
383
  --min_nodes = 2, # Minimum number of nodes in the cluster
396
384
  --max_nodes = 4, # Maximum number of nodes in the cluster
397
- --node_size = "small", # Supported values: small, medium, large
398
- --auth = true, # Whether to perform authentication with Azure
399
- --azure-tenant: string # Azure Tenant ID (optional, falls back to AZURE_TENANT env var)
385
+ --node_size = "small" # Supported values: small, medium, large
386
+ --auth = true # Whether to perform authentication with Azure
400
387
  ] {
401
388
 
389
+ mut tenant_id = ""
402
390
  let location = "eastus"
403
391
 
404
- mut tenant = $azure_tenant
405
- if ($tenant | is-empty) and ("AZURE_TENANT" in $env) {
406
- $tenant = $env.AZURE_TENANT
407
- } else if ($tenant | is-empty) {
408
- error make { msg: "Azure Tenant ID required via --azure-tenant parameter or AZURE_TENANT environment variable" }
392
+ if AZURE_TENANT in $env {
393
+ $tenant_id = $env.AZURE_TENANT
394
+ } else {
395
+ $tenant_id = input $"(ansi green_bold)Enter Azure Tenant ID: (ansi reset)"
409
396
  }
410
397
 
411
398
  if $auth {
412
- az login --tenant $tenant
399
+ az login --tenant $tenant_id
413
400
  }
414
401
 
415
402
  mut resource_group = ""
@@ -509,29 +496,27 @@ def --env "create eks" [
509
496
  --name = "dot", # Name of the Kubernetes cluster
510
497
  --min_nodes = 2, # Minimum number of nodes in the cluster
511
498
  --max_nodes = 4, # Maximum number of nodes in the cluster
512
- --node_size = "small", # Supported values: small, medium, large
513
- --aws-access-key-id: string, # AWS Access Key ID (optional, falls back to AWS_ACCESS_KEY_ID env var)
514
- --aws-secret-access-key: string # AWS Secret Access Key (optional, falls back to AWS_SECRET_ACCESS_KEY env var)
499
+ --node_size = "small" # Supported values: small, medium, large
515
500
  ] {
516
501
 
517
502
  let region = "us-east-1"
518
503
 
519
- mut access_key = $aws_access_key_id
520
- if ($access_key | is-empty) and ("AWS_ACCESS_KEY_ID" in $env) {
521
- $access_key = $env.AWS_ACCESS_KEY_ID
522
- } else if ($access_key | is-empty) {
523
- error make { msg: "AWS Access Key ID required via --aws-access-key-id parameter or AWS_ACCESS_KEY_ID environment variable" }
504
+ mut aws_access_key_id = ""
505
+ if AWS_ACCESS_KEY_ID in $env {
506
+ $aws_access_key_id = $env.AWS_ACCESS_KEY_ID
507
+ } else {
508
+ $aws_access_key_id = input $"(ansi green_bold)Enter AWS Access Key ID: (ansi reset)"
524
509
  }
525
- $"export AWS_ACCESS_KEY_ID=($access_key)\n"
510
+ $"export AWS_ACCESS_KEY_ID=($aws_access_key_id)\n"
526
511
  | save --append .env
527
512
 
528
- mut secret_key = $aws_secret_access_key
529
- if ($secret_key | is-empty) and ("AWS_SECRET_ACCESS_KEY" in $env) {
530
- $secret_key = $env.AWS_SECRET_ACCESS_KEY
531
- } else if ($secret_key | is-empty) {
532
- error make { msg: "AWS Secret Access Key required via --aws-secret-access-key parameter or AWS_SECRET_ACCESS_KEY environment variable" }
513
+ mut aws_secret_access_key = ""
514
+ if AWS_SECRET_ACCESS_KEY in $env {
515
+ $aws_secret_access_key = $env.AWS_SECRET_ACCESS_KEY
516
+ } else {
517
+ $aws_secret_access_key = input $"(ansi green_bold)Enter AWS Secret Access Key: (ansi reset)" --suppress-output
533
518
  }
534
- $"export AWS_SECRET_ACCESS_KEY=($secret_key)\n"
519
+ $"export AWS_SECRET_ACCESS_KEY=($aws_secret_access_key)\n"
535
520
  | save --append .env
536
521
 
537
522
  let aws_account_id = (
@@ -542,8 +527,8 @@ def --env "create eks" [
542
527
  | save --append .env
543
528
 
544
529
  $"[default]
545
- aws_access_key_id = ($access_key)
546
- aws_secret_access_key = ($secret_key)
530
+ aws_access_key_id = ($aws_access_key_id)
531
+ aws_secret_access_key = ($aws_secret_access_key)
547
532
  " | save aws-creds.conf --force
548
533
 
549
534
  mut vm_size = "t3.medium"
@@ -118,6 +118,17 @@ Work through the PRD template focusing on project management, milestone tracking
118
118
 
119
119
  **CRITICAL**: Steps 2-4 must happen in this exact order to avoid the chicken-and-egg problem of needing the issue ID for the filename.
120
120
 
121
+ ### Step 5: Update ROADMAP.md (If It Exists)
122
+
123
+ After creating the PRD, check if `docs/ROADMAP.md` exists. If it does, add the new feature to the appropriate timeframe section based on PRD priority:
124
+ - **High Priority** → Short-term section
125
+ - **Medium Priority** → Medium-term section
126
+ - **Low Priority** → Long-term section
127
+
128
+ Format: `- [Brief feature description] (PRD #[issue-id])`
129
+
130
+ The ROADMAP.md update will be included in the commit at the end of the workflow (Option 2).
131
+
121
132
  ## Next Steps After PRD Creation
122
133
 
123
134
  After completing the PRD, present the user with numbered options:
@@ -150,8 +161,10 @@ This will help identify the first task and set up the development workflow.
150
161
  If user chooses option 2:
151
162
 
152
163
  ```bash
153
- # Stage the PRD file
164
+ # Stage the PRD file (and ROADMAP.md if it was updated)
154
165
  git add prds/[issue-id]-[feature-name].md
166
+ # If docs/ROADMAP.md exists and was updated, include it:
167
+ # git add docs/ROADMAP.md
155
168
 
156
169
  # Commit with skip CI flag to avoid unnecessary CI runs
157
170
  git commit -m "docs(prd-[issue-id]): create PRD #[issue-id] - [feature-name] [skip ci]
@@ -159,6 +172,7 @@ git commit -m "docs(prd-[issue-id]): create PRD #[issue-id] - [feature-name] [sk
159
172
  - Created PRD for [brief feature description]
160
173
  - Defined [X] major milestones
161
174
  - Documented problem, solution, and success criteria
175
+ - Added to ROADMAP.md ([timeframe] section)
162
176
  - Ready for implementation"
163
177
 
164
178
  # Push to main
@@ -33,6 +33,7 @@ Complete the PRD implementation workflow including branch management, pull reque
33
33
  - [ ] **No outstanding blockers**: All dependencies resolved and technical debt addressed
34
34
  - [ ] **Update PRD status**: Mark PRD as "Complete" with completion date
35
35
  - [ ] **Archive PRD file**: Move completed PRD to `./prds/done/` directory to maintain project organization
36
+ - [ ] **Update ROADMAP.md (if it exists)**: Remove the completed feature from `docs/ROADMAP.md` roadmap if the file exists
36
37
 
37
38
  **Note**: Tests will run automatically in the CI/CD pipeline when the PR is created. Do not run tests locally during the completion workflow.
38
39
 
@@ -198,8 +198,6 @@ Present findings in this focused format:
198
198
 
199
199
  **Dependencies**: [What's already complete that makes this ready to work on]
200
200
 
201
- **Effort estimate**: [Realistic time estimate]
202
-
203
201
  **Success criteria**: [How you'll know it's done]
204
202
 
205
203
  ---
@@ -10,6 +10,8 @@ category: project-management
10
10
 
11
11
  You are helping initiate active implementation work on a specific Product Requirements Document (PRD). This command bridges the gap between PRD planning and actual development work by setting up the implementation context and providing clear next steps.
12
12
 
13
+ **IMPORTANT**: Do NOT include time estimates or effort estimates in your responses. Focus on task prioritization, dependencies, and clear next steps without speculating on duration.
14
+
13
15
  ## Process Overview
14
16
 
15
17
  1. **Select Target PRD** - Ask user which PRD they want to implement
@@ -190,8 +192,6 @@ Present the implementation plan:
190
192
 
191
193
  **Success criteria**: [How you'll know this task is complete]
192
194
 
193
- **Estimated effort**: [Time estimate]
194
-
195
195
  **Next steps after this**: [What becomes possible once this is done]
196
196
 
197
197
  ## Implementation Approach
@@ -1,38 +0,0 @@
1
- /**
2
- * Documentation File Discovery
3
- *
4
- * Discovers documentation files in a project with configurable patterns
5
- * and intelligent priority ordering.
6
- */
7
- export interface DiscoveredFile {
8
- path: string;
9
- name: string;
10
- priority: number;
11
- category: 'readme' | 'common' | 'docs' | 'other';
12
- relativePath: string;
13
- }
14
- export declare class DocDiscovery {
15
- private readonly ignoredDirs;
16
- /**
17
- * Get file pattern from CLI args or environment variable
18
- */
19
- getFilePattern(args: any): string;
20
- /**
21
- * Discover documentation files in the project
22
- */
23
- discoverFiles(baseDir?: string, pattern?: string): Promise<DiscoveredFile[]>;
24
- /**
25
- * Calculate priority for file ordering
26
- * Lower numbers = higher priority
27
- */
28
- private calculatePriority;
29
- /**
30
- * Categorize file by type
31
- */
32
- private categorizeFile;
33
- /**
34
- * Format discovered files for display
35
- */
36
- formatForDisplay(files: DiscoveredFile[]): string;
37
- }
38
- //# sourceMappingURL=doc-discovery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-discovery.d.ts","sourceRoot":"","sources":["../../src/core/doc-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAa1B;IAEF;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAajC;;OAEG;IACG,aAAa,CAAC,OAAO,GAAE,MAAsB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoCjG;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM;CA0DlD"}