From 8b7645a7599a551b04e38e0b70ed9f80489337c8 Mon Sep 17 00:00:00 2001 From: cubaseuser123 Date: Fri, 15 May 2026 11:55:39 +0530 Subject: [PATCH 1/3] mcp: expose server version in healthcheck output --- pkg/mcp/tools_healthcheck.go | 2 ++ pkg/mcp/tools_healthcheck_test.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/pkg/mcp/tools_healthcheck.go b/pkg/mcp/tools_healthcheck.go index 907b921f8a..af16fe25c5 100644 --- a/pkg/mcp/tools_healthcheck.go +++ b/pkg/mcp/tools_healthcheck.go @@ -21,6 +21,7 @@ func (s *Server) healthcheckHandler(ctx context.Context, r *mcp.CallToolRequest, output = HealthcheckOutput{ Status: "ok", Message: "The MCP server is running!", + Version: version, } return } @@ -33,4 +34,5 @@ type HealthcheckInput struct{} type HealthcheckOutput struct { Status string `json:"status" jsonschema:"Status of the server (ok)"` Message string `json:"message" jsonschema:"Healthcheck message"` + Version string `json:"version" jsonschema:"Version of the MCP server"` } diff --git a/pkg/mcp/tools_healthcheck_test.go b/pkg/mcp/tools_healthcheck_test.go index 64ea4482e4..b0c7d117db 100644 --- a/pkg/mcp/tools_healthcheck_test.go +++ b/pkg/mcp/tools_healthcheck_test.go @@ -63,4 +63,8 @@ func TestTool_Healthcheck(t *testing.T) { if !strings.Contains(output.Message, "running") { t.Errorf("expected message to contain 'running', got %q", output.Message) } + + if output.Version == "" { + t.Error("expected non-empty version") + } } From a5d480b3610c86c1e8392abe1956a4665d6101f4 Mon Sep 17 00:00:00 2001 From: cubaseuser123 Date: Sun, 17 May 2026 13:10:10 +0530 Subject: [PATCH 2/3] Cleanup: Extend CLI error wrapping to describe the invoke commands --- cmd/describe.go | 2 +- cmd/describe_test.go | 27 ++++++++++ cmd/errors.go | 125 +++++++++++++++++++++++++++++++++++++++++-- cmd/invoke.go | 4 +- cmd/invoke_test.go | 24 +++++++++ test_output.txt | Bin 0 -> 487870 bytes 6 files changed, 176 insertions(+), 6 deletions(-) create mode 100644 test_output.txt diff --git a/cmd/describe.go b/cmd/describe.go index 5a6f4a8d49..0169965c8b 100644 --- a/cmd/describe.go +++ b/cmd/describe.go @@ -36,7 +36,7 @@ the current directory or from the directory specified with --path. Aliases: []string{"info", "desc"}, PreRunE: bindEnv("output", "path", "namespace", "verbose"), RunE: func(cmd *cobra.Command, args []string) error { - return runDescribe(cmd, args, newClient) + return wrapDescribeError(runDescribe(cmd, args, newClient)) }, } diff --git a/cmd/describe_test.go b/cmd/describe_test.go index 10b1206c2b..f79ef39935 100644 --- a/cmd/describe_test.go +++ b/cmd/describe_test.go @@ -135,3 +135,30 @@ func TestDescribe_NameAndPathExclusivity(t *testing.T) { t.Fatal("describer was invoked when conflicting flags were provided") } } + +//TestDescribe_WrapsNotInitialized ensures that describe command wraps +//ErrNotInitialized with CLI-specific guidance via wrapDescribeError. + +func TestDescribe_WrapsNotInitialized(t *testing.T) { + _ = FromTempDirectory(t) + describer := mock.NewDescriber() + + cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(describer))) + cmd.SetArgs([]string{}) + err := cmd.Execute() + + if err == nil { + t.Fatal("expected an error when describing a non-existent function") + } + var cliNotInit *ErrNotInitialized + if !errors.As(err, &cliNotInit) { + t.Fatalf("expected ErrNotInitialized, got %T: %v", err, err) + } + if cliNotInit.Cmd != "describe" { + t.Fatalf("expected Cmd 'describe', got '%v'", cliNotInit.Cmd) + } + if !strings.Contains(err.Error(), "func describe") { + t.Fatalf("expected error to contain 'func describe' guidance, got: %v", err) + } + +} diff --git a/cmd/errors.go b/cmd/errors.go index 60d3361b4a..0c0c0ee135 100644 --- a/cmd/errors.go +++ b/cmd/errors.go @@ -95,6 +95,46 @@ func wrapDeleteError(err error) error { return err } +// wrapDescribeError wraps errors from describe command with CLI-specific guidance +func wrapDescribeError(err error) error { + if err == nil { + return nil + } + + var cliNotInit *ErrNotInitialized + if errors.As(err, &cliNotInit) { + return err + } + + var coreNotInit *fn.ErrNotInitialized + if errors.As(err, &coreNotInit) { + return NewErrNotInitialized(err, "describe") + } + + if errors.Is(err, fn.ErrClusterNotAccessible) { + return NewErrDescribeClusterConnection(err) + } + + return err +} + +func wrapInvokeError(err error) error { + if err == nil { + return nil + } + + var cliNotInit *ErrNotInitialized + if errors.As(err, &cliNotInit) { + return NewErrNotInitialized(err, "invoke") + } + + if errors.Is(err, fn.ErrNotRunning) { + return NewErrInvokeNotRunning(err) + } + + return err +} + // ---------------------------- TYPES AND METHODS --------------------------- // type ErrPlatformNotSupported struct { @@ -400,18 +440,33 @@ You need to be in a function directory (or use --path). Try this: func create --language go myfunction Create a new function - cd myfunction Go into the function directory + cd myfunction Go into the function directory func delete Delete the deployed function Or if you have an existing function: - cd path/to/your/function Go to your function directory - func delete Delete the deployed function + cd path/to/your/function Go to your function directory + func delete Delete the deployed function Or use --path to delete from anywhere: func delete --path /path/to/function For more options, run 'func delete --help'`, e.Err) + case "invoke": + return fmt.Sprintf(`%v +No function found in provided path. +You need to be inside a function directory to invoke it (or use --path). + +Try this: + func create --language go myfunction Create a new function + cd myfunction Go into the function directory + func invoke Invoke the function + +Of if you have an existing function: + cd path/to/you/function Go to your function directory + func invoke Invoke the function +For more options, run 'func invoke --help'`, e.Err) + default: return e.Err.Error() } @@ -707,3 +762,67 @@ Installation guide: https://knative.dev/docs/serving/#installation`, e.Err) func (e *ErrListClusterConnection) Unwrap() error { return e.Err } + +// -------------------------------------------------------------------------- // + +type ErrDescribeClusterConnection struct { + Err error +} + +func NewErrDescribeClusterConnection(err error) error { + return &ErrDescribeClusterConnection{Err: err} +} + +func (e *ErrDescribeClusterConnection) Error() string { + return fmt.Sprintf(`%v +Cannot connect to Knative cluster + +The 'func describe' command shows details about a deployed function. + +To use this command, you need: + 1. A running Kubernetes cluster + 2. Knative Serving installed on the cluster + 3. kubectl configured to access your cluster + +Troubleshooting: + kubectl cluster-info Verify cluster is accessible + kubectl config current-context Verify cluster connection + kubectl get ksvc --all-namespaces List deployed Knative services + +For more options, run 'func describe --help'`, e.Err) +} + +func (e *ErrDescribeClusterConnection) Unwrap() error { + return e.Err +} + +// -------------------------------------------------------------------------- // + +type ErrInvokeNotRunning struct { + Err error +} + +func NewErrInvokeNotRunning(err error) error { + return &ErrInvokeNotRunning{Err: err} +} + +func (e *ErrInvokeNotRunning) Error() string { + return fmt.Sprintf(`%v +No running function instance found to invoke. + +The 'func invoke' command sends test data to a running function. + +Try this: + func run Start the function locally + func invoke Then invoke it + +Or deploy and invoke remote: + func deploy --registry Deploy to cluster + func invoke --target=remote Invoke the remote instance + +For more options, run 'func invoke --help'`, e.Err) +} + +func (e *ErrInvokeNotRunning) Unwrap() error { + return e.Err +} diff --git a/cmd/invoke.go b/cmd/invoke.go index 2a60bc2f39..13d961a193 100644 --- a/cmd/invoke.go +++ b/cmd/invoke.go @@ -108,7 +108,7 @@ EXAMPLES "data", "content-type", "request-type", "file", "insecure", "confirm", "verbose"), RunE: func(cmd *cobra.Command, args []string) error { - return runInvoke(cmd, args, newClient) + return wrapInvokeError(runInvoke(cmd, args, newClient)) }, } @@ -162,7 +162,7 @@ func runInvoke(cmd *cobra.Command, _ []string, newClient ClientFactory) (err err } if !f.Initialized() { - return fmt.Errorf("no function found in current directory.\nYou need to be inside a function directory to invoke it.\n\nTry this:\n func create --language go myfunction Create a new function\n cd myfunction Go into the function directory\n func invoke Now you can invoke it\n\nOr if you have an existing function:\n cd path/to/your/function Go to your function directory\n func invoke Invoke the function") + return NewErrNotInitializedFromPath(f.Root, "invoke") } // Client instance from env vars, flags, args and user prompts (if --confirm) diff --git a/cmd/invoke_test.go b/cmd/invoke_test.go index 7feae43f03..2f8380b411 100644 --- a/cmd/invoke_test.go +++ b/cmd/invoke_test.go @@ -7,6 +7,7 @@ import ( "net" "net/http" "os" + "strings" "sync/atomic" "testing" "time" @@ -78,3 +79,26 @@ func TestInvoke(t *testing.T) { t.Fatal("function was not invoked") } } + +// TestInvoke_WrapsNotInitalized ensures invoke wraps uninitialized errors +// through the CLI error wrapping layer instead of inline fmt.Errorf. + +func TestInvoke_WrapsNotInitialized(t *testing.T) { + _ = FromTempDirectory(t) // empty dir, no function + cmd := NewInvokeCmd(NewTestClient()) + cmd.SetArgs([]string{}) + err := cmd.Execute() + if err == nil { + t.Fatal("expected error when invoking from empty directory") + } + var cliNotInit *ErrNotInitialized + if !errors.As(err, &cliNotInit) { + t.Fatalf("expected ErrNotInitialized, got %T: %v", err, err) + } + if cliNotInit.Cmd != "invoke" { + t.Fatalf("expected Cmd 'invoke', got '%v'", cliNotInit.Cmd) + } + if !strings.Contains(err.Error(), "func invoke") { + t.Fatalf("expected error to contain 'func invoke' guidance, got: %v", err) + } +} diff --git a/test_output.txt b/test_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..18d7082c67f71f77cb2364eca0b2734a90cf5015 GIT binary patch literal 487870 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

<56fd+WiBs>-Fr{!#n<3VvH|~zIrea zos2W}#-ftmX?rXx8I=;NdMd~pv<2NRIX$nd1>4_EzsIZ+Pu9|BX%=gb9W-wLWQQ^; z_sm1FjF?-3U5cWs6HnHsN}hQ6M6tfeOLr078^sgJ4rP9l_ffm7<*>w)C7uj#Jn>|S zCmY63Wrwo1V_V|MS`9M%TjI$!52b2d8-}OwP`M?1F*_qM@njLxbzUNmAGIQ!0ce;o zvii`Ah!yeLF$)gMx1-nP^k|EFzZNBj`yzRKKcdXUGZIghcrq|Lm*uf< zh#PJzKeOIsf!`cvX2?!pUykq9E{DeNi6`@O&$2^V;Hje*{(|T=LEq&`1*~`LTV>Ve=nqzS|8qH4L zh_f4w^WqfE_S_DSAouf@W*H(8$mhS%{mHO&v-jDdtV=m0CjJWYAv=_1hcfse@no(c zYYQXsWVb3y-)(jLb*s#(F=1nxz^{te#FGtoD1)w?v*^ASr}u11N<-P&liw0@apypC zzmP@TW_8ZZE(l@p+3a&&*Tz~-zIONLXWuT8k2YZV2m}T-p}aZr70(%Vnx{se(|2Ec2p<54>z*; zh|HmJO-G1+SFG3WZe9#!I(&~ctsiU7IjyYxwm7lg!#pGKEpBZ)g3#-0@qZlK!4=n~ z0jP+Mzq@C-ufBHOUU%p9O{B)!!7Qn+SQCF;m|fDhtsA?^xzn2QTXh)vtvmrh?9$CgAGRG{6}a-(`X4J2ZXk+iopG%%4pBz80qM=_y|Jx} zas1`1d4@>V6O9o{4D*R`mGe}~&7bz%ZLhv7Gmm-IRPZ%78n70h_Kf>HPxS&-aY%wK z`5a(L;AC(R$gna0(mFVsd_8-bO*yDxQB2~XHbQzG zyq2X)9G}q{RSbpjP%Hjgqw~H{{N1sb!+FIxae|I0?{rUQi8UYRLpVJd3$r#`+-8Lz zL>G~_dbJw7XNAhOM-n!@<>Rh4cY!{{lz!H$Kgq9vPF(Z2tiil{MyBuRci)r|veIp@ zi0;#&?~5{4V$Q7SyTd*-{@oTGHg60;Tdjk|*PIgV zb8BAldoA+1allLMEQUFy%WaH^f44O^_RUlMZ>ORxm7EiuE_|nQ3XOS)P@Uc%M{{QI zpRK;{pS7|UYX{HTRZQP$;#@P20=D+H?s0}o{|-}E{$wj~dh~}=pm!~4oRgq+JI*-Q zj@|pNbo)T^KN;Nh{p;JOtR2cWUz;vHomWnBs!clsM&K17^G~*EulpaGFZJn9X6(S> zvu-YH=OMSDXe|f3bf60#{0vf*_x^XE?X|(Pm-y>{*SBNsYZOQ=&0m*2g?#MNlYQm# z-%vEHUFa{rBPe{+({YdUT5l-uvh3dfn*Ep7{k4AfWd*#_JCeG*t^d8h<7z+6#|(lL{YJgU{xN1?JEXn`Qp@Pk-96|V=mMYZ9?e0oS}%1yPL0*T|naWMvVXYmvO(QR#U7Z&x)2pKH5b=)|^rnbG%l#ThlYqsRCvwzp>k!An&kPm*Z8@v!J`LimyR;A3^uC>~*`U9IubO+r27ATfaNaepl?GdHAGS zx_3Pt_ngT1dn{uy&*`4{g1zXr88X)PeHV$~J0q-?;qPGu#i>Qu>9z|4=`igM-BI~{ zd>paQ+xy)WuOm4_vt8HkEvmxCXqNuAc13%K^@bk1oxd)&UPJVaRr}(Yt9C_WzExzp zX{`PXol5P@`rpgd!sGKeLQU6LrHdz6CF?x$@8T#ttl=G#YqeA;v)ImJty=2FiXC@f z`JTF5q@wF5tX%h1Ur1LFkug8HjWS_}?&t@L3e88P?6JOWC%X~1Fm31SZN6h2dx1Z& zPA$?9d$(&XEzQ!(Pb(k$F+7E|@`>twSSz1>8gb~>I!;?ZZT-bG+#=d2bl-8UmG5N- zJ(SMcD_Mm7QVr41J)oglt#|ghm1!fps7%WRKAC2FrX z%UN{j7BVTHQqEjNH=fq$s(X zCN0hDT=Dex^)4VMZoP!M*>F~gf48+FtnOl{wC>$3$M8?m-E|&fO;6{nNW+gUhCj3U zo(zTd;V64t{8qdE#Q7ZaV%V*e97LktH@Y?@M~!<($uV6P`!}b{(V~oY@)4PHP=FxtTNK?@ z>9SkGpxsap+;2PGl^74w)SkxuxGPn&?@E4s2w`?ry33x;|8#ru?;76JHLKO!J}fo2 zLnGQ$rsI~b-qODxgf$pH-JZM&2&%UG;@Y7XSZ4yA!pzD?FfSvba!?A`$faqb3P5Dx@;4lA6 z|Ju%2zIM@ratzn#bEHdGiwQK_m#RiAVdFfvVI3jN6}F1E3y)E`Vzx7U*wWeS+5>xG z)h5)lVgZ@`ZM21VqTZU3z=c*91Da<(XZF#eaQMx_MMz?!&eOyF2*#S7$ZU?{2a`4a zUE}I@#hg~oCEy!ZWRvXc=S?{a$ozp7&56}~tJzzx8}`gOt^6PLt$D~xmjcx4P#0{T z3U~zTWQM0=$ZYof5H;v|{cYjK;G4y<#l|~sZ8<8|;w< zI}h(P@@&D0tvuoSdX6s+R~;z{?X2Po8jk;f+Gnk(BkEtrU3L%n-#8U4lHtxc`JLy$ z&roVd@7P7$g<2JQkl!3wqZ^WcW2aOviuSd6b@#W^vg?=3{8VYdnI@r_BRsU!q1!zE-_X1{=bV$F$57>KrLxbE>Uf+x zjXq&j9HWi2-z~LxQzT^{`^!$?9@xgr!z3Ad!R3W5;G1Z9M zPKy@bEc_Z(sC4027xxC*3>`Oblt1IS8?#-lQo5@_P0r9875?XyJz$#1EC6O#*L}ELimFjZJ)0j_S5h-aEDqBP zt&HW#Xb5y;V3>V;XBP$XCwPn;${`8-b3;P;jLmvyjCIvA$m;HAZ6&kG^SF!K!SidG zebrpP9`AKSqlMxY)AxIN%?|UutND>xJ7;65Wm%ReL*L`v(X3(;H6}X>U+9Y%CKG$ZhCy#Fr&g0cBX-KR>;$geR8ueIXa`9Po z)cL*ZkmGZ)S0YB2SG-B=b?l?vB1zjC55L0f!M<%3(R4h}`SxPpZ(@H8Wx0IcF51P! zuOnVW*C^Kx^ShOVz3NtJm&3wt^$1uu5;;Vf$RI@D1dE+LlqX0(E6Z)vwS0_te%}(G zqtETXYp%zc!HOi6Ws2}8=Z`} z0mZtBR<*_}xH5Fu-XswX9+{qq7pSaV^B=UO>k%l`oFMj641uSAMgT%?^;UDEhxS|x zRCi^sB=;S@!Rm-iIresM%j;*dL%oiAQGjhd~)=<;;(JzvS`jtBe7>@aJtM}9uF zHP&XDDZKatnI|5HC{KKH6r_9&@w zm~V@}+KRRLx=Z5!*XQfL6z@MAcQg;@@e$J4Je+$o^Ch{e!578D{aNDgi|OH-?z(2K zeuwUk_iM2)a_{Eo()iUaEs}>yhF9}$>-KKfns+N+-#71uefVQ}x2pkNx~TrGY42*k zW=~A_Z|05Mzm?tXbs}DjJUH%{1jk~Xax5#icXCopt5ZVLu!mgL!lASTdc^Jnw=ylH zbx?D=yHs!c;XdBwYN7MA*3yl2;n-P7OYRrdzV zGA57%FOj(ja?EX6 zKvKe+xdPd zF-aZUH)pUp=giETMbx|!v=1vrRE{=mw|CBSK?gfK(CTCFTLgG8WKmPA<5tr5oJu0A zw3WR5^R_*QWJ=pz$zy+ioLyWOB_OtqsA8ve)Cj~@dG*PhWx!F7sP14 zh_BHTcF2v@vRUO{OWNpW1lMWP@Ab3_ICa{^ll~SWgkM)iqh+I~y*jkzPT*OTO}!UZ z4O;o7PJd9o5QP7!L`C5IT8TnsavlAV%}2b0zt<{n#9=Rm1|nJ_BA(#fg{>yzEMvwz z6bF^eR!)aXBAAl4yLzzRzWVyH-u_~}S$9vImHAANL9&9!`N*<)D%Z31(owE|>!o9! zUgl^U@=L7Af(C(CNmxT#_kRHOSgVapOPAM zV9!|#Q_Zl;vl{K6%BWt+c?m|RxXa6c2Cc?A-=;BPV_s2}nLtJ}{> zZHXsX-STwV+bm7vWpbVL4aw>{`&}->>+E$%wsZXs+0&B{JuM^?nJ8+NUZ+p9cgeRL zEqf%tb3O$m`q8)LFl{#e=ZVcyMi@kW-__oBRFPAv%CfNey4XMT+izJ>&gm)Hf z^nS3c{=~jmSN7KYG$qwzpGhm!dB*m-{v*>=7&r<&;9u;VZTBhK(>=N*k!+pnWy8XW4^Xm}J_=6s-i$MU$qe&FFvY0>?$%|Y%gt@$~4$1G}_{A3o> zS#Zj`LXuK)$2sNPZN7ciPM?~(d8rc6j5IQVU7~<{S&Pt85 zvtU-pkG2%Y9A0a~D}wf8l+UCEm9MT8>ikgsJztO5B|D}0q2%}N2l)Ws+TZ(0=;NPT zaHqRV4}5$mW6?VFe?M>K?_sv72J}SQ>vQ|MoWbE#8g<&4iF9?1eps7vjcsPYs#5!C zklJ)aHfQmxk4B%@Q_ODzg>jvBzca_Q#pbL#_D|)zR{5PZE6Wb-Qg38_E2F&VyQMHFa%Cy|Ar7E(tYc6oLCt{{S1w zduU{?O>UGTMdP_iq5m!A$?7q_4wOC+x;S@FZVF>X7UGI&v2>QU>~+1AZo5T-y%4m+ zv}RxY2r7r&kEhUi(}7r5W2y4i(s!(p8DHwh z?Bwrq$$2Oekye8KN!HB|Wgav?&vDiC?>|XY_fY1EoEY^h55z90EX6k>Aw7SUxK5=f zw>yNlR2)?+iFN70o}{+U{QWSc#<-byOZrr^Q<(Q+Rh{g-eKLJ6sh$zl+)0|B6 zkh<2y`lY%xBa(C`Jewv-$MRiAV#s0D^$|OJ@hTy%y+Tjl$y{m9tKVkP(2$0P zlzw@Z#fXZVu)&b;>A&qW$$(c4e|3!zZ8>j-YS?SbdF$q6Hk4Ow$i+c< z)3sr|;?}wnw#xGe6Kn$Pnv62X4s_May1cuhBzsby$HsbIQLTKcw}QTb!r7j~q5MYe zKl1O%7xyu(@7!$(k{WZ`FqLb98%{xh-%7v9vGiZ#C{wmx_3N zeW^3a9FJqvrP8IZi<{KYD5upC=MtQaOlLiXM1HSJ6B;__`^#h_o~u8J-LOp57)ht^ zO`>AUc(7~?tL1xlMiBG6rfx98hVhZ3iuY>gS~)Qg|7+)3iACDE)^@H{cfRzTA9=SL zrP?V!J00aQ01+%0zkb4d-nDbBATsS-YdhEaTvl_jrx|+B89II5P6zAWD$xtyYZza{ z_*y1sddm9JUOU&S=;c4lD)c+4U~og$seg=ftz|3ShWD|W(UZkM+(h^nJbl2=aetRof zj#SOV(tITm#cxvggOxpghJAK&Bw5{2&nVtcvs!LcHnXY|U;SEDKz)9CqDD2*$1 z69G)4tlN^)cvU!|)n)6@cwM;qD%68Mla`M{R$mUyt}~93-h8Zc<>QWw>{xQ)$%Ci1 zCQ@@>{zmOiFv+>{Q`WwXhg+)V&D~9*+{Qx1V=&d}GL~!2Xf4%+2SS6MGf;Y{k9t%7 z=C=>5qHlEzMiV!OmGCduqSgAILXCa51|8Q0{r)CowVldbDkeFFrd&HtpI7r4vJp8x zDL&i%N}yeeKqPfJ{|W&yb{^gYA#g6QYkn%*X9G6d8`82s;15R(!Sjxg6BeR&g2>Vmfd}Vi2cDDcPEUs3?=&McAzYxzau*FUUKr#M{Z&| zmG`&h{|nKjg?K&Pr+qDJBQ)scM<0D#-l5yzvc$l@%V)XU06&$MzS{dS?36wc9epkD zkK{Xe3UcuI4gI|-zmdE2qeL<2Ev^12wp^n?eTQGEN$uwnH~*Xb`$BTF{w!-We)~~& zFo_306+6+7C)5u?ClbItA^hZhpBMc-K)iY`2GLfP_uOtqy}R-l#Nq^G>5=diny_}I zdARodWv@_-)y&;G7WZbSgu6Eoy_fkslXW056*oTSVjGP{^bW*jbd3GG(XA1LWiR2O zm@6F-v*%ugc_dTu>+r;1g4g2SmOTAaV!ttC=*NjjMvi;W0;PCR*I_bb_zV6N-|4f{ zkIr&b8Tb0L9=99cyQLao853Qu5hdH5TS%tUc3Ez&_mgu(34A!k*eJJ;2y8k@={-qpux_{dhblvE}7ONpuiDgSXJN|KqSi$=&aW zylb9Ms zeR?G_?poKF^1iLgX$!kW+&bzjI-?n>=~5Ao@<6`F3V>S6>FtHX_GP&(>Gqb6S$oUf zmFU)NjMY)9**|uR(>;f}Mz-m6yFG@>)>~?c zYg_X^hqzUayMBKV9-joeQO4Qs_saP?O=3+Wcpbyn?MUo6Db=UPa1d{OHd^bQhvPV? zy=_|Si95KZrBv7LdAmDwh@UScF4Kt9c{1mn=l?Ii4bslr;Bi?+JrfEPalyCxoqDV{ zo{L>q|DsvYF>Uw+X5_i}Ya(8~2OD2%dC2Oi!M@eX6yzNkAthhGv2?E^*C+XZYVb_ z^Y=Kbp5Om3P{Dc*naSTI-j6Wm+|Dq>CHt%vT5Ij`isW}!F~f0A{O#rMW64LdkQu$j zyW3mrk8^&~PAllGuSDRlWERa5A*qbvK*nPJli9}_&}U5~1*>^Q;wnz}mF%Pq_szb# zp6wtaGTiC5$ZH>EnK#NYJ^2{Rc8`b0=(ySgnYC}^KNihq)bbD<@3R#q<2@Ez2x@*7 zP;f=xZwYUx$#x_&tNCD@Zc(dnELKdl-LleE4nP>N7axK=fVANaur-RfVBl=r|j~)s62O!i9u3gsUN3il;S%OJh8Z33Y$VY^c3j9MRwF>Ep8v;mYxF90wc1 zWsw9}(dihrl=vR3GaCpLu?c1{n%;BVaxF zVrq)pN~|XGHKt!5zgM&x$}=6t!EQ*bj;&LqD&EEaA&lDdhT=*;U|%0ro={j{&(4Fg zlNZC3fbwZh5@=_dZDhC}GI}fQobu$al6ApzCKLZ7xZk%TH}^lTeUK9(wI?%qv`)&L zhh_Q7!#und_(2Al<>}j5BhUDHEy$^55QA%;_PBjl{tB1Tt?4pdmli6$#mG0cj8Yj{ zh+Qx((p@TUL@*2;WLB$K?aqk$*?3-|$?lcV-8p7-Au#|*&uMsP`KWy)d~7Bk8J=Xv zsa=InAZUHsw8pebj3eQAPp6UZv1jJHgbfF0hPv@a%(3{hIqz-t)o}2JgEt(UT|D-8 zi79eeMVY3xOwX3-*)l!JPTrTSu;Y*sN@n_rA8%v zmZ@SHqUC&TnVwxKZJD0^I`iaow@gp6DRa?zJ`b~HdScbF=896aOi!&wliO);nVud2 z*t)d8ui8a$=4X0d3~UD^2kfeg>g3QW^lfVHs`XI=3pAYa^C-8~=6F|Vtb-BSNUw~n zrnX6B_ArCbjmHiz{zywTDL2yTw&FxqGn@c;8rC(h1uNIR8{KO#ZR;bmoWXb||2hB7 znQQWaUwk|XN_O$S{N<_q^fMX!#ZNP9l@8iv7l?0skWb&rD-}J+SXNw?HT!>s$mWx< z>UtC2^Su*!nx{TZ+EuS^C#~Z%A#bH6&0@YB+L*5CWjynFsVA9XnG`ycRR z`j}R?Uw1qu`%v>nRMJE3F{QgWwukqZfDfemd-eDA=JdT;KA?#p`!Dvs7tU~2jq@vW zXM1@3`99Y>?mIF%tQq#=wTzdM#`{Urt#)@$d8ntuuqWnK_Hw(8cKVvnv?k0V*mmEi zo4emQj$$x2J7XE&d%h43vZAG?R{BhOQgCRD$l0biAD;$;qbd&z@pz1YN?DABwfj5y zNp+t0@)_9xwr3iT@?ub)&dhGpOfDL;@g~fNMnYJmMX*ncQJO={!VJbUW;4wkYveNB zLyyrQw`-n>F@J?KhJspF$4BB()TT$0&ZyrpRl^$X!uaZ1sf#_LRDUn#ST<|bay+W< zUvG(BC1TW?ro@eBk~f+9Ps^@65o>GFL*1y-;;gCEte021&bT9df&=j$C8v@3{bl7S zyQIguV~*$6&lDU5-+NO=ZD;1YzG|KvOzpMq*p=Jek%6CZa+{1>sszp(X;~k2$7T7? zhBm?Ny6dHq9u9-mAmi_YL~+W`U*(;zIDVGsTq|Nuw{K;XP^a?E)~O)-5`E&d1~D?L zK`^(UGn5hek_B-Pq;Z}Mmhi|W@C)fRt$a2;#xCi(R8E}2nvrW6g{$Rfo77F0s~pwq z)kUw&flT{v)Y|}4(b^f{*VH(qQitW}5mjqGzg8B0FFH+?9sB&TygQTcklD{Cb5B2% zNQTp2my_Jp!TJ~fvpy?c+DodTaRuGjniCIU)2Np9G`z<11?uEuV(zEQ*%-RJ7B{BC z(Ks7NO{-f%K7<5|O)|%PWakk39 zJe7`4BflZHU6_GYbW*ho)EESrds3+Js5f^!4SNOibY+^{xW3ek zxu?;x85#Bw*YpijN4!dA`m%ko=wBuCxzSAbb<1qD`-i!Eo+Uk`a@@D9Zo$xar;YVT z_i1uxKr6_^w|akCe_ij~0NLO?WM58b?KJXV^K5t7xIq&7l;ph25D)ULbjL`YS?&Qd zt~?b^!9DnbWhDz(&x-ab%JF6n!jSq-TP^v_LZ{Z=yb|3qIX}WKn-!Oo;hAt6Yg)!K z8uN2rN^hMzbXc*^J)1sH%WehKU@i@H@=SMQB>i*V{d|giwz45PYVlnc(f!>zgFfBg z)smMXE|=!8vSQF|iN8vO`(A!Kliw8?TLhcTc{XbuWq3kuwPk4F?La%ptU?N> zTjo0aal2SEMy^9!9bNYk*0lV!MmQv$mQ(f1x#f%zHMap5cZA#3zZ~DD+pF)z@}3C_ z%l!mi1IFvZ_bcnL|Eo8-J(usy^GS1iKMbpMr$3f7w`AZf-OR;!b-3u&vjMO6EP4=Y za3-%&vORv6k2uXYYU7RX(i@uJel)}W5$iU*AUjA4S<}?X^q4FEZVPJq!MRkG%V<5V zbWYUtmz(26Ep2Uluu5LJ9PedXoa5Sb8-Fi&Q@xMfZdm?SY=}qO_e1VEXS(M3&oMn6 ziVs^B^}jx+$E_c$2W}UnCK~(aSV7I;wp9g)5vv8e6$wA9QQty#;J=jL?8&|b_1g`} z*ncAbsJ7Ox$hO=3NqN&9{g^RMUr~*b0hjZdyUJrIxR_Gte5>hQ*3Gv%(wQ6kblaGE z)FaXT$C6>Jx1({&@;7s?J-y+=cnznh}eCkH0o0t6@-=^En2co;IkMGNW&IjBJx~$a$Ku*{JoM(+n zdN`DI`YW-Ldi$mIOC0+6V|=NfLnGAUA(h@u(1z`1#rwa~>ky4Eg?}&PiS1CCyU}uY zsg3X19HKIP?jZ12|F#WDNN)ojqWgs)oG-;wE|Z4o-m65P+(y(q;abx3bWL`eYx;vS zn&)fyHmR?t`P&>ts_Dx;LHgW~McC$O>R5{02VYe>91yDlaFDpb@u z?bWrMX`h>&Q6J$teM5JI(`GtH>vWybiTTM^XPWE(e_ha7ui+Q`{d(l zH1o8u23?@ncG7*bl%+mu_c&Kd-}X3Y5g8T~-@!RR+aa>uiEYVU32ocsTs|7yJuZ%= zb9)>mMp4vZ_qbR>+x9ruje>WNf8`WzkBii=u-i?@_|obJyT{A1bPjQJdaS%Ua2BPpZzO4W+YHRxS7gWIFHG_uLZ4!ckH?s2>%8rn5(m(aX>oE{r7?Hbp| z(!YB%P!etJ8rMr`-aSs2$7Q?5?{dm_kLzP2xLxD@So+7zz&bHJKT`*4=D%^m4qtUi zkY#Qmcpmnl&*b;?B(C2hfVOiAOn2`2{_pbsG@$$IjH#XGTnshDyKjU(R@Yj)QctD~ zQQCdp`zt%UntuOCII4Re<$daRykB2M+>(2#Z_B;ZpU5r-^{kl(GDI$id3(2ac#dWr d3ZnHw{`!f;^w;F`&*cu1E5Zln-&*1Q{{wXaxm^GN literal 0 HcmV?d00001 From 4332790fe764e2925ffc402be01b4fff4124ed72 Mon Sep 17 00:00:00 2001 From: cubaseuser123 Date: Sun, 17 May 2026 18:02:47 +0530 Subject: [PATCH 3/3] Fix trailing whitespace in invoke error message --- cmd/errors.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/errors.go b/cmd/errors.go index 0c0c0ee135..2856bf1eaf 100644 --- a/cmd/errors.go +++ b/cmd/errors.go @@ -457,8 +457,8 @@ For more options, run 'func delete --help'`, e.Err) No function found in provided path. You need to be inside a function directory to invoke it (or use --path). -Try this: - func create --language go myfunction Create a new function +Try this: + func create --language go myfunction Create a new function cd myfunction Go into the function directory func invoke Invoke the function